"Merhaba Dünya" kodunu GPL lisansıyla çalmamak için ne yapmam gerekir?


42

Projede math.cbüyük bir GPL başlığına sahip bir dosya buldum ve ...

//------------------------------------------------------------------------------
/// Returns the minimum value between two integers.
/// \param a  First integer to compare.
/// \param b  Second integer to compare.
//------------------------------------------------------------------------------
unsigned int min(unsigned int a, unsigned int b)
{
    if (a < b) {
        return a;
    }
    else {
        return b;
    }
}

Ben ... dk değerini almak gerekir ve böylece Tamam, serin bu dosyayı !? Yani tüm projeyi bu yüzden mi açmam gerekiyor? Yoksa matematiği yeniden icat etmeye ihtiyacım var mı?

Bunun delilik olduğuna inanmıyorum, bu yüzden soru şu: GPL başlığını ne zaman kaldırabiliriz?

Ben garip olmalı mıyım ?

unsigned int min(             unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG            ) {  if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG            ) {  return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE;  }
else {return hyrthrtRERG            ;    } }

Cidden, yukarıdaki gibi bir kod yazmamı istiyorlar mı?


22
Eh, son Google vs Oracle durumunda the jury did find that one nine-line function that Google acknowledged copying was infringing( ArsTechnica gelen ).
Zenon

5
Aww hadi, cidden, min?
Mircea Chirea

33
Bu sorunun varlığının kötü bir şey olduğunu kanıtladığını söyleyebilirim - Bir programcının işi daha az programlama, daha fazla yasal karmaşa ve bürokrasi oldu
K.Steff

4
Kopyala . Gibi önemsiz bir işlev mintelif hakkı kapsamında değildir. Ayrıntılar için cevabımı gör.
Tony Pony

6
@Loki, bir mil kadar özlüyorsun. Algoritmalar telif hakkıyla değil patentlerle kaplıdır. Telif hakkı yazarın ölümünden 70 yıl sonra sona erer, bu nedenle 60'larda telif hakkıyla korunan çalışmalar hala oldukça tazedir. Son olarak, soru bu algoritmayı kopyalamak değil, algoritmayı değil.
alexis,

Yanıtlar:


53

Buradaki pek çok kullanıcının aksine, basitçe şunu önerebilirim: Kopyala!

Kodun biçimlendirmesinin kodlama standardınıza uyduğundan ve aynı zamanda yorumu kaldırmanız veya yeniden yazmanız gerektiğinden emin olun. Hiç kimse onu kopyaladığınızı asla bilemez - bir kod parçası bu kadar basit olduğunda, sıfırdan yazmış olabilirsiniz. Kodlama standardınız bir şekilde tam olarak snippet'te göründüğü gibi görünmesini gerektiriyorsa, öyleyse - sıfırdan yazmış olsanız göründüğü kadarıyla görününceye kadar.

Bir düşünün, bu çok zor (!) Bu kesin eserin ilk defa yazıldığı zaman - bir şey bu kadar önemsiz olduğunda, kendiniz yazmak istemiyorsanız, kopyalamamak için çok az neden vardır.

Bu tartışmayı yapmak bile bana biraz gereksiz geliyor - eğer gerçek bir iş çıkarırsak pragmatik olmalıyız!


5
Asıl soru, önemsiz ve önemsiz arasındaki engelin nerede olduğu ve insanların kodumu "GPL MIN GERÇEKLEŞMEYE BAKIN!" gibi bir şeyle işaret etmeyeceğinden kesinlikle emin olmanın yoludur. _ <
cnd

20
Eh, telif hakkı orijinalliği eşik kavramı var . Ve bu kadar basit bir metot telif hakkıyla korunmamalı. Yine de IANAL ve yetki alanları değişiyor. Yine de, her CS eğitiminin en az beş defa tamamen aynı şekilde yazdığı bir şey bunun altında olabilir.
Joey

4
@ nilu: Let us then say that the programmer wrote his own version of MIN and it ended up looking exactly like the one from math.c - would it then be okay?Evet, bir kazaydı. “Öyleyse, onu yeni kopyalasaydı ne fark ederdi?” Bitlerin rengi var . ansuz.sooke.bc.ca/entry/23 Bu, çoğu bilgisayar bilim adamının anlayabileceği bir şey değil - aslında karmaşık bir konudur, ancak yasalarca tanınan bir şeydir. Bir şeyin yasal olup olmadığı konusunda şüpheniz varsa, bir avukatla en iyi konuşabilirsiniz .
Mark Byers

4
@alexis: Amacınızı anlıyorum, ancak gerçekten aynı fikirdeyim - sonuçta elde edilen kod aynı ise, programlayıcıdan başka hiç kimse kopyalanamaz mı veya sıfırdan yazıldığını bilemez. Açıkçası, birinin min uygulamada çok az sorunu olması gerekir ve muhtemelen başka bir uygulama bulmaktan daha az zaman alacaktır. Bununla birlikte, eğer bir programcı gerçekten kopyalarsa ve başka hiç kimse işlevi yazmamış olduğunu bilmiyorsa, o zaman ne zararı oldu? Programcı bir çeşit “suçluluk” hissetmiyorsa, cevap hiçbiri değildir. Gerisi sadece semantiktir.
nilu

5
@MarkByers: 'Kanıtlayamıyorum' dediğimde, bir suçun bile işlendiğine dair hiçbir kanıt bulunmadığını kastediyorum - işlenen suç programcının aklıyla tamamen sınırlı. Açıkçası, eğer bazı tatlılar çalınırsa durum böyle olamaz - bunun dünya üzerinde fiziksel bir etkisi vardır (lolipop - = 1). Eğer 'suç' kendi aklınızla sınırlıysa, ahlaki mi ahlaka aykırı mı olduğuna kim karar verebilir?
nilu,

18

Sorunuzu doğrudan yanıtlamıyor, ancak şunu deneyin:

#define min(a,b) ((a) < (b) ? (a) : (b))

Bu görkemli, karmaşık makroyu kamuya açıklatacağım. Yine de bu teknikle ilgili bir makale yayınlamak zorunda kalabilirim.

Makro fobik iseniz, bu satır içi sürümü deneyin (gerçekten, bir SPARC üzerinde kodlamadığınız sürece, bir işlevi mingiriş / çıkış kodunda olduğu gibi her yerde olduğu gibi sararak çok sayıda CPU döngüsü kaydedersiniz ):

inline int min(int a, int b)
{
    return a < b ? a : b;
}

Önemsiz snippet'ler için kod lisanslama sorunu gerçekten de biraz sıkıntı verici. Bir avukata danışın, ancak bunların gerçekten lisans alınamayacağını ve / veya lisanslamanın pratikte uygulanamayacağını varsaymak için istekliyim. 'Kelime' kelimesini telif hakkı veya ticari marka olarak kullanamadığınızla aynı, sonra onu kullanan kişilere yaslanın. (Hop)


1
Ah, bu kodu kesinlikle telif hakkıyla alabilirler, ancak algoritmanın basitliği göz önüne alındığında, mahkeme tarafından kopyalandığınızı ispatlamak zor olurdu. Aynı kodu kullanmayın, kural sadece bunu kendi beyninizi kullanarak yazdıysanız ve orijinali herhangi bir şekilde kopyalamadıysanız yapabilirsiniz.
Robotu

2
@StevenBurnap Tabii ki orijinal kod da aynı sorunlara sahip olacaktı: telif haklarına sahip olduklarını ispatlayabilirler (yani daha önceki bir uygulamadan kopyalamadıklarını)?
Richard,

19
Min'in makro sürümüyle ilgili sorun çıkarmaya çalıştığınızda gelir min(a++,b++).

4
“Bunu serbest bırak ... kamuya açık” çok ABD merkezli. Bu birçok ülkede aynı şeyi ifade etmiyor ve gerçekten de bazıları yasal olarak mümkün değil.

9
Teşekkürler, ancak 2000'li yılların bir derleyicisinde, bir derleyici gibi önemsizliklerin üstesinden gelebilir min.
DeadMG

18

Feragatname : Avukat değilim. Tavsiyemi kullanmak kendi sorumluluğunuzdadır.

Bu uygulama minolduğunu telif değil bunu yazma çok az makul yolu sadece olmadığından,.

Hukuk dünyasında, bu birleşme doktrini (aynı zamanda fikir-ifade bölünmesi olarak da bilinir) olarak bilinir. İşlevin (telif hakkı olmayan) fikrinin , (potansiyel olarak telif hakkıyla korunan) ifadesiyle "birleştirildiği" söylenir . Bu nedenle, kod telif haklarına tabi değildir - kullanmakta serbestsiniz.

Güvenli tarafta olmak için, sözlü olarak kopyalamayın . Değişkenler için farklı adlar kullanın, kendi biçimlendirmenizi uygulayın, yorumlar için kelimeyi kelimeye kopyalamayın. Bu kodun gerçek anlamıyla gösterilmesi telif hakkı kapsamında olabilir.

Bunun birisinin sizi dava etmeyeceğini garanti etmediğini, ancak en azından güçlü bir savunmanız olacağını unutmayın.

Ayrıca, bir kod parçası telif hakkıyla korunmasa bile, yine de bir yazılım patenti kapsamında olabileceğini unutmayın (Bu, minişleviniz için geçerli değildir ).


2
Bunu Oracle'a söylemeye çalışıyorsun!
GordonM

1
Belki bu 9-satır işlevi önemsiz değildi ... Kodu görmek istiyorum.
Tony Pony

1
programmers.stackexchange.com/a/148362/28718 , benim için doğru kod olduğunu farzederek önemsiz görünüyor.
GordonM

12

BSD lisansı altında aşağıdaki kodu serbest bırakıyorum . Bu lisans çok daha izinli olduğu için, uygulamamı kullanırsanız telif hakkı sorunlarıyla karşılaşmamalısınız.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}

Bu GPL kodunu mühürlemediğinizden ve yeniden yazdığınızdan nasıl emin olabilirim? : P (sadece şaka)
cnd

1
Değilsin. Ama kodumu kullanırsan, iyi niyetle kullandığını iddia edebilirsin.
GordonM

3
Sevinirler, kardeşler, yeni çağın doğduğu gibi - şimdi minkapalı kaynaklı yazılımda bulabiliriz . Ayrıca, @Sholy, şimdi kopyalayıp kopyalamaması GordonM'in sorunu.
K.Steff

5
Ayrıca "Creative Commons" başlığı altında yayınlıyorsunuz. Bu sayfaya, buraya yapıştırılan kodla ilgili olarak bakın.
Martin York


11

Bu çok saçma bir durum, katılıyorum, ama suçlanacak sadece kendin var. Özel kod yazıyorsanız, GPL lisanslı kaynak dosyaları, dönem okumamalısınız. Math.c dosyasını dosya sisteminizden kaldırın, dokümantasyonu saklayın ve ihtiyacınız olan API'nin herhangi bir bölümünü tekrar uygulamaktan çekinmeyin. Eğer kodu okumazsanız, kendi kodunuz benzer olursa endişelenmenize gerek yoktur.

Diyelim ki? GPL, ekosisteme geri vermeden kasıtlı olarak ücretsiz koddan yararlanmanızı önler. Şartlarını yerine getiremiyor veya yerine getirmiyorsanız ve başka bir matematik kütüphanesi uygulamak istemiyorsanız, kabul edebileceğiniz bir lisansla birlikte her zaman bir tane satın alabilir veya ücretsiz bir tane bulabilirsiniz.

Microsoft'un programcılarının şirketi yasal sorunlardan korumak için açık kaynak kodunu okumasına izin verilmiyor. Tamamen etik nedenlerden ötürü, aynı şekilde lisansına uyma niyetinde olmadığınız herhangi bir programla yapmalısınız.

Bunu kullanma hakkına sahip değilsin math.c, ama hiç kimse piyasasını uygulamaları için köşeye sıkıştırmaya çalışmıyor min. GPL'nin amacı, kısıtlayıcı değil programcı "özgürlüğü" (ve son kullanıcının özgürlüğünü) arttırmaktır. GNU lisansı, FSF ve Özgür Yazılım Hareketi Richard Stallman ile başladı ve Stallman, ortaya çıkan Symbolics lisp'ın her yeni versiyonunu sıfırdan yeniden uygulamaya koymaya başladı. FSF, GPL kitaplığını yeniden uyguladığı için kimsenin peşinden gidemez (ve edemez).


Yani, ama bu gerçekten garip bir örnek. Bu bir örnek, bu benim okumam ve izlemem gerektiği anlamına geliyor ... ama anladığım kadarıyla burada GPL lisansı seçmekte özgürüm. Bu yüzden Stallman kim olduğunu biliyorum;)
cnd

2
Sholy, üzgünüm ama ne dediğin hakkında hiçbir fikrim yok! Hangi örnek (Ayrıca Stallman'ın kim olduğunu da mı soruyorsun? Google o. Ya da sadece wikipedia'yı kontrol et.)
alexis

3
"Microsoft'un programcılarının açık kaynak kodunu okumasına izin verilmiyor" oh benim, bu korkunç - bu konuda okuyabileceğim bir yer var mı? Google yardım etmiyor.
amara

İyi soru. Bazı Demir Python geliştirme forumunda okudum, ama ne yazık ki şimdi bulamıyorum. Özet: Jim Hugunin ( hugunin.net/microsoft_farewell.html ), python uygulamasına bakmalarına izin verilmediğini ve birisinin kendi koduna bakmalarına izin verilip verilmeyeceğini sorduğunu belirtti (Microsoft, Iron Python'u açık kaynak yaptı) . Cevap: Demir Python için özel bir istisna yaptılar.
alexis,

GPL'nin özgürlüğünü artırmak isteyen insanlar, (özellikle) programcıların değil, programın tüm kullanıcılarıdır.
James Youngman

7

Cevap: Sadece yazarın izni ile.

Bu telif hakkıyla korunan kod. Yazarın izni olmadan kopyalayamazsınız.

Farklı bir lisans kullanan kendi versiyonunuzu yazmanız minveya bir versiyonunu kopyalamanız gerekecektir min.

Unutmayın, telif hakkı ile korunan kod , algoritma değil . Telif hakkı yasası metinden gelir. "Math.c" yorumdan başka bir şey olmasa ve çalıştırılabilir bir kod içermese bile, telif hakkı altında korunmaya devam ederdi .


1
Kendi versiyonun ne demek? MIN BENİM KENDİ sürümü, komik geliyor!
cnd

2
Unutmayın, sahip değilsiniz min, uygulamanız için belirli bir karakter dizisine sahipsiniz min.
Robot'a Gort

2
Kişisel kullanım dışında, yazarın izni olmadan hiçbir şekilde değiştiremezsiniz. Sıfırdan yeniden yazmak zorundasın. Bütün mesele bu. Boş bir düzenleyiciye oturduysanız ve bununla neredeyse aynı bir şey yazdıysanız, bunun iyi olacağını, çünkü kopyalamadığınıza dikkat edin. (Hafızanızdan yazı
Robotu Gort

2
Hayır, şaka yapmıyorum. Ve evet, muhtemelen böyle durumlarda kaçabilirsin. Yaptığını kanıtlamak telif hakkı sahibine kalmış. Sadece kanunun ne olduğunu söylüyorum, savunmuyorum.
Robotu

3
Çünkü, bu önemsiz şeyleri yeniden kodlamazsanız, başkasının işini size izin vermeyecek şekilde kullanıyorsunuzdur. İhtiyacınız olmayacak kadar önemsizse, kullanmayın.
alexis

6

İşte Google Sözde sökük budur. Bu bir dizi için sağduyu gibi görünüyor.

 908     /**
 909      * Checks that fromIndex and toIndex are in range, and throws an
 910      * appropriate exception if they aren't.
 911      *
 912      * @param arrayLen the length of the array
 913      * @param fromIndex the index of the first element of the range
 914      * @param toIndex the index after the last element of the range
 915      * @throws IllegalArgumentException if fromIndex > toIndex
 916      * @throws ArrayIndexOutOfBoundsException if fromIndex < 0
 917      *         or toIndex > arrayLen
 918      */
 919     private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
 920         if (fromIndex > toIndex)
 921             throw new IllegalArgumentException("fromIndex(" + fromIndex +
 922                        ") > toIndex(" + toIndex+")");
 923         if (fromIndex < 0)
 924             throw new ArrayIndexOutOfBoundsException(fromIndex);
 925         if (toIndex > arrayLen)
 926             throw new ArrayIndexOutOfBoundsException(toIndex);
 927     }

Hepsi bu kadarsa, karar temyizde atılacak. Ancak Wired'a göre, hakim Google’ın diğer 8 dosyayı kopyaladığını da buldu. Bkz. Wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony'nin Midilli

5
Evet, ancak "sağduyu" telif hakkı için bir çubuk değildir. Bu, kendilerini kopyalayıp düzenlemeleri veya sıfırdan yazmalarıdır. Bir şeyin "sağduyu" olup olmadığı, telif hakları değil, patent testidir. Başka bir deyişle, Oracle bu metni telif hakkıyla alabilir, ancak bu algoritmayı patentleyemezler.
Robotu

Bu 9 çizgi, birleşme doktrininin klasik bir örneğidir. Bir dizi üzerinde aralık kontrolü yapmak için başka kaç yol var?
Tony Pony

1
@TonythePony, lot, eğer fonksiyon bir metin mesajı içeren bir istisna atarsa.
avakar

4
Birkaç kişi bu metni Google'da kopyalayan kişinin aynı zamanda Sun'da yazan kişi olduğunu söylemiştir . Programcılar Stallman'ın - çılgın sakallı aşırılık yanlısı - haklı olduğunu anlamalılar . Tüm kötülüklerin kökü olan para, insanların teknolojiye neden ilk başta katıldıklarını unutmasını sağlar. : - /
HostileFork

5

Zaten bu kodu kullanmayacağım, çünkü yorum kodun yaptığıyla eşleşmiyor. Yorum integerkullanılırken kod kullanılır unsigned int. Bu fonksiyonun derinliklerinde hangi hataların gömülü olduğunu kim bilebilir?

Cidden, bu "tekerleği yeniden icat etme" nin gülünç hale geldiği ve onu bir tuz tuzu ile almayı unuttuğun yer. Sıfırdan kendi versiyonunuzu yazmanız, kodunuzun isimlendirme kuralları ve stil rehberiyle (örn. math_min_uint(x, y)) Eşleştirin , çalıştığından emin olun (ünite testi veya her neyse) ve yaşamla ve telif hakkı sorunları olmadan devam edin.

Büyüyen deneyimle, tekrar tekrar ihtiyaç duyduğunuz bu önemsiz snippet'ler sadece araç kutunuzdadır ve çok fazla düşünmeden yeniden yazacaksınız veya basitçe kendi kütüphanenizden alacaksınız.


2

İnsanlar, hem ruh hem de mektup olarak, telif hakkı yasasının, aslında fotokopi çekmenin yasak olduğu anlamına gelir - aynı düşünceyi kendiniz ifade etme eylemi değil, sonuç şüpheli bir şekilde ortaya çıksa bile.

GPL kodunu alırsanız, değiştirirseniz, aldığınız lisansa aykırı bir şekilde kullanır ve türetilmiş bir çalışma olmadığını iddia ederseniz, yasaları çiğniyorsunuz demektir. İkinci versiyonunuzu kullanıyor olsanız bile - tüm değişkenlerin adlarını değiştirdiniz ve formatı değiştirdiniz, fakat yine de orijinalinden türetildi.

Ancak, kendi sürümünüzü yazıyorsanız minve görevin önemsizliği nedeniyle, bu tür bir şeyi mantıklı bir şekilde yazabilmeniz için çok fazla yol olduğu gerçeği ve biraz tesadüf, sürümünüzün tamamen aynı olmasıyla sonuçlanırsa GPL’nin koduna göre, o zaman hiçbir şeyi kopyalamadınız.

Her iki hikayenin mahkemede geçip geçmemesi farklı bir konudur. Daha büyük veya daha karmaşık bir kod örneği başka bir yerde göründüğünde, yorumlarla, biçimlendirme ve yazım hatalarıyla tamamlandıysa, orijinalini bildiğiniz kanıtlanabilirse, bir başkasını bağımsız olarak yazdığınıza ikna etmek zor olacaktır. kaynak (buraya buraya gönderdiğiniz gerçeği göz önüne alındığında oldukça önemsiz olmalıdır).


1

Eğer kod gerçekten "min" örneği kadar önemsiz ise, o zaman bir başkasının aynı işlevi farklı bir açık kaynak lisansı altında zaten uygulamış olma olasılığı çok yüksektir.

Lisansa bağlı olarak, kodu kapalı kaynak uygulamanıza eklemenize izin verilir.


1

Sadece 30 saniyede kendin yaz. Tam olarak aynı algoritmayı kullanabilirsiniz. Sadece kopyala / yapıştır yapmayın.

Telif hakkı, yalnızca fikrin ifadesini korur, fikrin kendisini değil. Fikri, doğrudan kopyalamamanızı sağlayarak kullanabilirsiniz.

FWIW, bu kadar önemsiz bir kod parçasını kopyalamanın sizi başın belaya sokacağından şüpheliyim. Hasarlar sıfır olacaktır ve çoğu yargı alanında muhtemelen adil kullanımın altına düşecektir. Ancak yasal davalar o kadar acı verici ki, riske atmak istemem.


1

GPL kodu olarak, buradaki en büyük soru, kodunuzu dağıtmayı mı planladığınızı veya yazılımınızı satmayı mı planlıyorsunuz?

Yalnızca dahili olarak kullanıyorsanız, GPL size istediğiniz gibi yapma konusunda tam bir özgürlük sunar.

Paketinizi dağıtmayı planlıyorsanız, en kolay şey paketinizi GPL kaynağınızla aynı şartlarda kullanmaktır. Başka yollar da var ama karmaşıklaşıyor.

Yazılımınızı satmayı planlıyorsanız, kullandığınız ve / veya edindiğiniz GPL lisansı altında değiştirilen herhangi bir GPL kodu için kaynak kodunu dağıtmanız gerekir.


0

C ++ kullanıyorsanız ve C kullanmıyorsanız, standart kitaplığı kullanarak std::minveya std::maxiçinde <algorithm>:

http://www.cplusplus.com/reference/algorithm/min/

Bu size genellik kazandırır ve karşılaştırılabilir her tür için işe yarayacaktır. Ayrıca: d-bag neyin icat ettiğini iddia etmeye çalışırsa ve yazılım patentleri kapsamındaysa, ISO komitesi ile uğraşırlar ... siz değil.

Genel durumda, kodu kimin yayınladığını not edin. Kurum veya akılcı birey? Aklı başında bir birey ise (açık kaynak kodlu olduğu gibi), onlara güzel bir not yazın ve izin alın. Cevaplarını sakın tamam diyerek sakla. Sorun çözüldü.


-2

Genel durum için: Min. Ve max'ın aksine (telif hakkı olan veya olmayabilir) kesinlikle telif hakkı olan daha karmaşık bir kod.

Sonra kodunuzu GPL! Bununla birlikte, kodunuzu istediğiniz lisansı verirken uygulamalarını kullanmanıza izin veren LGPL kitaplıklarının (ve istisnalar dışında GPL) bulunduğunu unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.