W projekcie znalazłem plik math.c
z dużym nagłówkiem GPL i ...
//------------------------------------------------------------------------------
/// 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;
}
}
OK, spoko, więc muszę uzyskać minimalną wartość i ... ten plik !? Czy muszę z tego powodu otworzyć cały projekt? Czy też muszę odkrywać na nowo matematykę?
Nie sądzę, żeby to było po prostu szalone, więc pytanie brzmi: kiedy możemy po prostu usunąć nagłówek GPL?
Czy muszę być dziwakiem i to robić ?
unsigned int min( unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG ) { if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG ) { return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE; }
else {return hyrthrtRERG ; } }
Poważnie, czy chcą, żebym napisał kod jak wyżej?
the jury did find that one nine-line function that Google acknowledged copying was infringing
(z ArsTechnica ).min
nie jest objęta prawem autorskim. Zobacz moją odpowiedź, aby poznać szczegóły.Odpowiedzi:
W przeciwieństwie do wielu użytkowników tutaj, po prostu sugeruję: skopiuj go!
Upewnij się, że formatowanie kodu odpowiada standardowi kodowania, a także prawdopodobnie powinieneś usunąć lub przepisać komentarz. Nikt nigdy nie będzie wiedział, że go skopiowałeś - gdy fragment kodu jest tak prosty, równie dobrze możesz napisać go od zera. Jeśli twój standard kodowania w jakiś sposób wymaga, aby funkcja wyglądała dokładnie tak samo jak we fragmencie kodu, niech tak będzie - o ile wygląda tak, jak by wyglądał, gdybyś napisał go od zera.
Pomyśl o tym, nie jest to wcale (!) Pierwszy raz, gdy napisano dokładnie ten utwór - gdy coś jest tak trywialne, nie ma powodu, aby go nie kopiować, jeśli nie masz ochoty pisać go sam.
Nawet prowadzenie tej dyskusji wydaje mi się trochę zbyteczne - musimy być pragmatyczni, jeśli chcemy wykonać jakąkolwiek prawdziwą pracę!
źródło
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?
Tak, gdyby to był wypadek. „Jaką miałoby to różnicę, gdyby właśnie go skopiował?” Bity mają kolor . ansuz.sooke.bc.ca/entry/23 To nie jest coś, co większość informatyków może zrozumieć - to rzeczywiście skomplikowany temat, ale jest to coś, co jest uznawane przez prawo. W razie wątpliwości, czy coś jest legalne, najlepiej porozmawiać z prawnikiem .Nie odpowiada bezpośrednio na twoje pytanie, ale spróbuj tego:
Niniejszym udostępniam to wspaniałe, złożone makro do domeny publicznej. Chociaż być może będę musiał opublikować artykuł na temat tej techniki.
Jeśli jesteś makrofobiczny, wypróbuj tę wersję wbudowaną (tak naprawdę, chyba że kodujesz na SPARC, zaoszczędzisz wiele cykli procesora, nie zawijając funkcji tak wszechobecnej jak
min
kod wejścia / wyjścia):Kwestia licencjonowania kodu dla trywialnych fragmentów jest naprawdę trochę uciążliwa. Skontaktuj się z prawnikiem, ale kusi mnie założenie, że tak naprawdę nie można uzyskać licencji i / lub licencji nie można egzekwować w praktyce. Tak jak nie możesz chronić praw autorskich ani znaku towarowego słowa „słowo”, oprzyj się na ludziach, którzy go używają. (ups)
źródło
min(a++,b++)
.min
.Oświadczenie : Nie jestem adwokatem. Skorzystaj z moich rad na własne ryzyko.
Ta implementacja nie
min
jest objęta prawem autorskim , ponieważ istnieje tylko kilka rozsądnych sposobów jej napisania.W świecie prawnym jest to znane jako doktryna fuzji (znana również jako podział ide-wyrażenie). Mówi się, że pomysł funkcji (nieobjęty prawem autorskim) „połączył się” z wyrażeniem (potencjalnie chronionym prawem autorskim) . Dlatego kod nie podlega prawom autorskim - możesz z niego korzystać.
Aby być bezpiecznym, nie kopiuj go dosłownie . Używaj różnych nazw zmiennych, stosuj własne formatowanie, nie kopiuj komentarzy słowo po słowie. Dokładna dosłowna reprezentacja tego kodu może być objęta prawem autorskim.
Pamiętaj, że nie gwarantuje to, że ktoś cię nie pozwie, ale przynajmniej będziesz miał silną obronę.
Pamiętaj też, że nawet jeśli fragment kodu nie jest chroniony prawem autorskim, może nadal być objęty patentem na oprogramowanie (nie dotyczy to twojej
min
funkcji).źródło
Wypuszczam następujący kod na licencji BSD . Ponieważ ta licencja jest znacznie bardziej liberalna, nie powinieneś mieć problemów z prawami autorskimi, jeśli korzystasz z mojej implementacji.
źródło
min
w oprogramowaniu zamkniętym. Ponadto, @Sholy, teraz problemem jest GordonM, czy go skopiował, czy nie.Zgadzam się, że to absurdalna sytuacja, ale możesz winić tylko siebie. Jeśli piszesz własny kod, nie powinieneś czytać plików źródłowych na licencji GPL, kropka. Usuń plik math.c ze swojego systemu plików, zachowaj dokumentację i możesz ponownie wdrożyć dowolną potrzebną część interfejsu API. Jeśli nie czytasz kodu, nie musisz się martwić, jeśli twój kod okaże się podobny.
Marnotrawstwo, mówisz? GPL celowo zapobiega korzystaniu z darmowego kodu bez zwracania się do ekosystemu. Jeśli nie możesz lub nie chcesz spełnić jego warunków i nie chcesz wdrożyć kolejnej biblioteki matematycznej, zawsze możesz ją kupić lub znaleźć darmową, która zawiera licencję, którą możesz zaakceptować.
Programiści Microsoft nie mogą czytać kodu open source, aby chronić firmę przed problemami prawnymi. Z przyczyn czysto etycznych powinieneś zrobić to samo z każdym programem, którego licencji nie zamierzasz stosować.
Nie masz prawa do korzystania z tego
math.c
, ale nikt nie próbuje zdobyć rynku na wdrożeniamin
. Celem GPL jest zwiększenie „wolności” programisty (i wolności użytkownika końcowego), a nie ograniczanie go. Licencja GNU, FSF i Ruch Wolnego Oprogramowania zaczęły się od Richarda Stallmana, a Stallman zaczął od ponownej implementacji od nowa każdej nowej wersji Symbole Lisp. FSF nie poszedłby (i nie mógł) ścigać nikogo za ponowne wdrożenie biblioteki GPL.źródło
Odpowiedź: Tylko za wyraźną zgodą autora.
To kod chroniony prawem autorskim. Nie możesz go skopiować bez zgody autora.
Będziesz musiał napisać własną wersję
min
lub skopiować jej wariantmin
wykorzystujący inną licencję.Pamiętaj, że w przypadku praw autorskich chroniony jest kod, a nie algorytm. Prawo autorskie pochodzi z tekstu. Nawet jeśli „math.c” był jedynie komentarzem i nie miał w ogóle kodu wykonywalnego, nadal byłby chroniony prawem autorskim.
źródło
min
, posiadasz określoną sekwencję znaków, która przypadkowo się implementujemin
.Właśnie to Google podobno został oszukany. To wydaje się być zdrowym rozsądkiem dla tablicy.
źródło
I tak nie użyję tego kodu, ponieważ komentarz nie pasuje do tego, co robi kod. Komentarz mówi
integer
, podczas gdy kod używaunsigned int
. Kto wie, jakie błędy kryją się w głębinach tej funkcji?Poważnie, w tym miejscu „Nie wymyślaj koła ponownie” staje się śmieszne i zapomniałeś wziąć go z odrobiną soli. Po prostu napisz własną wersję od zera, dopasuj ją do konwencji nazewnictwa i przewodnika po stylu w swoim kodzie (np.
math_min_uint(x, y)
), Upewnij się, że działa (test jednostkowy lub cokolwiek innego) i kontynuuj życie bez problemów z prawami autorskimi.Z rosnącym doświadczeniem, te trywialne fragmenty, których potrzebujesz raz po raz, są po prostu w twoim zestawie narzędzi i przepiszesz je bez zastanowienia lub po prostu zdobędziesz je z własnej biblioteki.
źródło
Wydaje się, że ludzie zapominają, że prawo autorskie, zarówno duchowe, jak i listowe, oznacza, że czynność faktycznego kopiowania jest zabroniona - nie akt wyrażania tej samej myśli samemu, nawet jeśli wynik okazuje się podejrzanie podobny.
Jeśli weźmiesz kod GPL, zmodyfikujesz go, użyjesz go w sposób niezgodny z licencją, na podstawie której go otrzymałeś, i twierdzisz, że nie jest to dzieło pochodne, wówczas łamiesz prawo. Nawet jeśli używasz drugiej wersji - zmieniłeś nazwy wszystkich zmiennych i zmieniłeś formatowanie, ale nadal pochodzi ono z oryginału.
Jeśli jednak piszesz własną wersję
min
, a ze względu na banalność zadania, fakt, że istnieje tylko tyle sposobów, aby rozsądnie napisać coś takiego, i trochę zbiegów okoliczności, twoja wersja jest dokładnie identyczna do kodu GPL, to nic nie skopiowałeś.Jednak to, czy któraś z opowieści przejdzie w sądzie, to inna sprawa. Jeśli większy lub bardziej złożony przykładowy kod pojawi się gdzieś indziej, wraz z komentarzami, formatowaniem i błędami ortograficznymi, trudno ci będzie przekonać każdego, że napisałeś go niezależnie, tym bardziej, jeśli można wykazać, że znasz oryginał źródło (które, biorąc pod uwagę fakt, że opublikowałeś go tutaj, powinno być dość trywialne).
źródło
Jeśli kod jest naprawdę trywialny, jak w przykładzie „min”, istnieje bardzo duże prawdopodobieństwo, że ktoś już zaimplementował tę samą funkcjonalność na innej licencji typu open source.
W zależności od licencji może być dozwolone umieszczenie kodu w zamkniętej aplikacji źródłowej.
źródło
Po prostu napisz to sam w 30 sekund. Możesz użyć dokładnie tego samego algorytmu. Po prostu nie kopiuj / wklej.
Prawo autorskie chroni tylko wyrażenie pomysłu, a nie sam pomysł. Możesz skorzystać z pomysłu bezpośrednio, pod warunkiem, że go nie kopiujesz.
FWIW, wątpię, aby skopiowanie tak trywialnego fragmentu kodu i tak sprawiłoby ci kłopoty. Uszkodzenia byłyby równe zeru i prawdopodobnie podlegałyby dozwolonemu użytkowaniu w większości jurysdykcji. Ale sprawy prawne są takim bólem, że nie chciałbym ryzykować.
źródło
W związku z tym, że jest to kod GPL, głównym pytaniem jest to, czy planujesz nie rozpowszechniać kodu lub sprzedawać oprogramowanie.
Jeśli używasz go tylko wewnętrznie, GPL daje Ci pełną swobodę robienia tego, co chcesz.
Jeśli planujesz dystrybuować pakiet - najłatwiej jest GPL pakiet na takich samych warunkach, jak każde źródło GPL, którego użyłeś. Istnieją inne sposoby, ale komplikuje się.
Jeśli planujesz sprzedawać swoje oprogramowanie, musisz rozpowszechniać kod źródłowy dla każdego kodu GPL, którego używałeś i / lub zmieniałeś na tej samej licencji GPL, na podstawie której go nabyłeś.
źródło
Jeśli używasz C ++, a nie C, pomiń ten problem, używając standardowej biblioteki
std::min
lubstd::max
w<algorithm>
:http://www.cplusplus.com/reference/algorithm/min/
To kupuje ogólność i będzie działać dla każdego porównywalnego typu. Ponadto: gdy cokolwiek d-bag spróbuje twierdzić, że go wynalazł i jest objęty patentami na oprogramowanie, będzie dudnić z komitetem ISO ... nie z tobą.
W ogólnym przypadku zwróć uwagę, kto opublikował kod. Korporacja czy zdrowa osoba? Jeśli jest to rozsądna osoba (jak w przypadku wielu otwartych źródeł), napisz do nich fajną notatkę i uzyskaj pozwolenie. Zapisz ich odpowiedź, mówiąc, że jest w porządku. Problem rozwiązany.
źródło
W ogólnym przypadku: bardziej złożony kod, który zdecydowanie może być chroniony prawem autorskim, w przeciwieństwie do min i max (który może, ale nie musi, mieć prawa autorskie).
Następnie Licencjonuj swój kod zgodnie z biblioteką, tj. GPL! Należy jednak pamiętać, że istnieją biblioteki LGPL (i GPL z wyjątkami), które pozwalają korzystać z ich implementacji, jednocześnie dając kodowi dowolną licencję.
źródło