Blog

GitHub-kód kereskedelmi termékben: licencek és ellenőrizendő tudnivalók

Markdown

A megengedő MIT, Apache és BSD licencek, a copyleft GPL/AGPL licencek, a LICENSE fájl hiánya, valamint az AI által hozzáadott kód eredetének ellenőrzése.

A teljes cikk elolvasása

Terméket fejleszt, és talál egy kész megoldást a GitHubon: egy könyvtárat, egy sablont vagy akár egy teljes projektet, amely pontosan azt tudja, amire szüksége van. Claude azt javasolja, hogy vegye át a projektjébe. Ön pedig megtorpan: a kód nyilvánosan elérhetőnek tűnik, de valóban használhatja? Eladhatja az azt tartalmazó terméket? Később felléphet Ön ellen a szerző?

Sorban átveszem, miért nem jelent önmagában engedélyt, ha egy kód nyilvánosan elérhető a GitHubon; mely licencek teszik lehetővé a kód használatát és a termék értékesítését; mely copyleft-feltételek írhatják elő az érintett mű megfelelő forráskódjának átadását; és hogyan ellenőrizheti a licencet egy perc alatt, mielőtt felhasználja a kódot. Nincs olyan válasz, hogy „attól függ”.

Az Ailoot használatával kapcsolatos gyakorlati tudnivalókat a dokumentációban találja.

Figyelem

Ez az anyag tájékoztató jellegű; nem vagyok ügyvéd. Az alábbiakban népszerű licencek és szabályok feltételeit ismertetem, elsődleges forrásokra mutató hivatkozásokkal, de a konkrét helyzetét ellenőrizze a licenc szövege alapján, nagyobb kereskedelmi termék esetén pedig ügyvéddel is. A döntést Ön hozza meg.

Igaz, hogy ha egy kód fent van a GitHubon, ingyen használhatja?

Fő tanulság

Nem. Az, hogy a kód megtekinthető, még nem jelenti azt, hogy felhasználhatja a saját munkájában. Alapértelmezés szerint minden kódot szerzői jog véd, és nem használhatja fel, hacsak a szerző külön engedélyt nem adott rá. A GitHubon való közzététel önmagában csak arra ad lehetőséget másoknak, hogy megtekintsék a tárolót, és azon belül, a GitHubon másolatot készítsenek róla. A kód termékbe illesztésének jogát a szerző által a tárolóhoz mellékelt licenc biztosítja. Maga a GitHub nem ad ilyen jogot.

A fő csapda itt a „nyílt” szó. Látja a forráskódot, ezért úgy tűnhet, hogy mivel nem rejtették el, használhatja. Ez a gondolatmenet téves. A „nyíltan olvasható” és a „felhasználásra licencelt” két külön dolog.

Alapértelmezés szerint minden alkotás, így a kód is, a létrehozás pillanatától szerzői jogi védelem alatt áll. Amíg a szerző kifejezetten nem ad engedélyt, nem használhatja fel. Ezt írja le a GitHub a saját licencútmutató-oldalán is.

Amikor létrehoz egy alkotást (és a kód is alkotás), azt alapértelmezés szerint kizárólagos szerzői jog védi. Ha nem mellékel olyan licencet, amely mást mond, senki más nem másolhatja, terjesztheti vagy módosíthatja a művét anélkül, hogy igényt vagy pert kockáztatna.

— choosealicense.com (GitHub-referenciaprojekt), https://choosealicense.com/no-permission/

A második réteg maga a GitHub. Sokan úgy gondolják, hogy mivel a kód közzétételével elfogadták a GitHub szabályait, mások ottani kódját is felhasználhatják. A szabályok pontosan az ellenkezőjét mondják. Nyilvános tároló létrehozásával a szerző csak arra ad engedélyt másoknak, hogy megtekintsék és forkot készítsenek róla, vagyis másolatot hozzanak létre magán a GitHubon belül. Ez nem jogosít fel arra, hogy a kódot a saját munkájában használja.

Amikor nyilvánossá tesz egy tárolót, nem kizárólagos, világszerte érvényes licencet ad a többi felhasználónak arra, hogy az anyagait a szolgáltatáson keresztül, a GitHub funkcióin belül használják, megjelenítsék és (fork készítésével) reprodukálják. További jogokat licenc mellékelésével adhat.

— GitHub szolgáltatási feltételei, D. szakasz, https://docs.github.com/en/site-policy/github-terms/github-terms-of-service

A kulcsfontosságú szavak az utolsó mondatban vannak: „a GitHub funkcióin belül” és „a további jogokat licenc biztosítja”. A fork a GitHubon belül marad. Amint a kódot a saját termékében szeretné felhasználni, nem is beszélve az értékesítéséről, külön engedélyre van szüksége a szerzőtől. Licenc nélkül nincs joga hozzá, akkor sem, ha a kód mindenki szeme előtt van.

Mi határozza meg, hogy használhatja-e valaki más kódját?

Fő tanulság

A tárolóban található licencfájl, amelynek neve általában LICENSE vagy LICENSE.md. Ez a szerző engedélye, amely meghatározza, mit tehet és mit nem tehet a kóddal. A licenc három kérdésre ad választ: használhatja-e a kódot kereskedelmi termékben, módosíthatja-e, és zártan tarthatja-e a saját forráskódját? A különböző licencek eltérő válaszokat adnak, ezért elsőként ezt a fájlt ellenőrizze; csak ezután nyissa meg magát a kódot.

Minden egy fájlon múlik. Egy megfelelően karbantartott tárolóban van licencfájl, általában LICENSE, néha LICENSE.md néven, vagy a README közvetlenül említi a licencet. Ez a szerző engedélye, amely megadja, milyen feltételekkel használhatja a kódot. A GitHub rendszerint már a fájl megnyitása előtt megjeleníti a licenc nevét a tárolóoldal oldalsávjában.

Hogy ne vesszen el a jogi megfogalmazásokban, érdemes három, az Ön helyzetére vonatkozó kérdés segítségével elolvasni a licencet:

  1. Használhatja-e ezt a kódot olyan kereskedelmi termékben, amelyért az emberek fizetnek?
  2. Módosíthatja-e a kódot az igényei szerint?
  3. Nyilvánosságra kell-e hoznia később a termék forráskódját, vagy zártan tarthatja?

A licencek közötti különbségek szinte mind a harmadik kérdésre adott eltérő válaszokból erednek. Az első kettőre a népszerű nyílt licencek többnyire „igent” mondanak: használhatja, módosíthatja, eladhatja. Az emberek ott hibáznak, amikor arról kell dönteni, hogy a licenc miatt nyilvánosságra kell-e hozniuk a saját kódjukat. Most a három kérdés alapján áttekintjük a fő licenctípusokat.

Mely licencek engedik a kód használatát és a termék értékesítését?

Fő tanulság

Kereskedelmi termékhez a legkényelmesebbek a megengedő licencek: MIT, Apache 2.0 és BSD. Szinte mindent megengednek: a kód használatát és módosítását, a termék értékesítését, valamint a saját forráskód zártan tartását. Egy kötelezettség van: meg kell őrizni a licenc szövegét és a szerzői attribúciót. Az Apache 2.0 a szabadalmi igények ellen is védelmet nyújt, és előírja a módosított fájlok megjelölését. Ha valaki más kódja e licencek egyikével rendelkezik, biztonságosan felhasználhatja kereskedelmi termékben.

Kezdjük a jó hírrel. Aki eladásra szánt terméket épít, annak a megengedő licencek csoportja a legjobb választás. Több ilyen licenc létezik, de a három leggyakoribb az MIT, az Apache 2.0 és a BSD. Mindhárom „igent” mond az első két kérdésre, és lehetővé teszi, hogy saját forráskódját zártan tartsa.

A leggyakoribb és legegyszerűbb az MIT. A szövege elfér egyetlen bekezdésben.

Ezzel ingyenes engedélyt adunk minden olyan személynek, aki megszerzi e szoftver egy példányát, hogy azt korlátozás nélkül használja, beleértve a használat, másolás, módosítás, összeolvasztás, közzététel, terjesztés, allicencbe adás és példányok értékesítésének jogát is, feltéve, hogy a fenti szerzői jogi és engedélyezési nyilatkozat minden példányban szerepel.

— MIT-licenc, opensource.org, https://opensource.org/license/mit

Egyszerűbben fogalmazva az MIT szinte bármit megenged a kóddal kapcsolatban, beleértve a termék értékesítését és a saját forráskód zártan tartását. Az egyetlen kötelezettség, hogy mellékelje a licenc szövegét és az attribúciós sort. Például a Babel, a .NET és a Rails MIT-licenc alatt jelent meg, így szinte biztos, hogy már Ön is használt ilyen licencű kódot.

Az Apache 2.0 hasonlóan működik, de két fontos elemmel egészül ki. Először is kifejezetten véd a szabadalmi igények ellen: a kód szerzői vállalják, hogy nem perelik be Önt a kódhoz kapcsolódó szabadalmak miatt. Másodszor, néhány további, formálisabb használati követelményt tartalmaz.

A mű vagy származékos művek példányait bármilyen adathordozón reprodukálhatja és terjesztheti, módosításokkal vagy azok nélkül, feltéve, hogy a címzetteknek átadja e licenc egy példányát, megjelöli a módosított fájlokat, megőrzi a szerzői jogi és szabadalmi nyilatkozatokat, valamint mellékeli a NOTICE fájl olvasható példányát, ha van ilyen.

— Apache License 2.0, 4. szakasz, https://www.apache.org/licenses/LICENSE-2.0

A BSD (2 és 3 záradékos változatban) lényegében hasonló az MIT-hez: használhatja, módosíthatja és értékesítheti, de meg kell őriznie a szerzői jogi nyilatkozatot. Az áttekinthetőség kedvéért mindhármat táblázatba foglaltam.

LicencEladható a termékZártan tartható a forráskódTeendőSzabadalmi védelem
MITigenigena szerzői jogi nyilatkozat és a licenc szövegének megőrzésenincs ilyen záradék
Apache 2.0igenigenszerzői jogi nyilatkozat, NOTICE fájl, módosítások megjelöléseigen
BSD (2 és 3 záradékos)igenigena szerzői jogi nyilatkozat megőrzésenincs

Így alkalmazhatja mindezt a saját helyzetére: ha valaki más kódjánál MIT, Apache 2.0 vagy BSD licencet lát, megnyugodhat: használhatja kereskedelmi termékben, módosíthatja, és saját forráskódját zártan tarthatja. Arra kell ügyelnie, hogy ne távolítsa el az átvett rész licencfájlját és attribúcióját.

Hogyan érvényesülnek a GPL és az AGPL forráskódra vonatkozó kötelezettségei?

Fő tudnivaló

A GPL és az AGPL megengedi a kereskedelmi felhasználást. A GPL forráskódra vonatkozó kötelezettségei az érintett mű példányának átadásakor keletkeznek; a puszta szerveroldali használat példányátadás nélkül nem ilyen kiváltó feltétel. Az AGPLv3 a módosított verzióval távolról kapcsolatba lépő felhasználók számára forráskód-felajánlási kötelezettséget is előír. Határozza meg, mely összekapcsolt műre terjed ki a licenc: nem tartozik automatikusan minden különálló, független komponens ide.

A copyleft az érintett művet és származékait azonos licenc alatt tartja, ha a vonatkozó feltételek teljesülnek. A GPLv3 szerint a licenc hatálya alá tartozó mű vagy összekapcsolt származékos mű forrás- vagy tárgykódú példányainak terjesztésekor teljesíteni kell a licenc és a megfelelő forráskód átadásának követelményeit. Ez nem terjed ki automatikusan az azonos termékben vagy szerveren futó összes független programra.

Vegyük a webszolgáltatás példáját. Egy GPL-könyvtár saját szerveren történő futtatása anélkül, hogy a felhasználóknak példányokat adna át, önmagában nem követeli meg a teljes szolgáltatás közzétételét. Az érintett, összekapcsolt alkalmazás ügyfeleknek való terjesztése viszont GPL-kötelezettségeket válthat ki; a kód integrációja és licence alapján állapítsa meg, milyen forráskódot kell mellékelnie. A felhasználóknak átadott böngészős kliens terjesztése külön vizsgálandó kérdés.

Az AGPLv3 hálózati feltételt is hozzáad: ha módosítja a programot, és a felhasználók távolról lépnek kapcsolatba ezzel a verzióval, jól látható módon fel kell ajánlania nekik annak megfelelő forráskódját. Ez pontosabb annál az állításnál, hogy bármely AGPL-komponens puszta szerveroldali futtatása megnyitja a szolgáltatás minden független részét.

Zárt terméknél vizsgálja meg az érintett művet, a komponensek összekapcsolását, a példányok terjesztését és az AGPL hálózati feltételét. Válasszon kompatibilis, megengedő licencű alternatívát, vagy szerezzen külön engedélyt, ha a vonatkozó kötelezettségeket nem tudja teljesíteni. A kereskedelmi felhasználás önmagában megengedett; a kérdés a tényleges licencnek és integrációnak való megfelelés.

Mit tegyen, ha a tárolóban egyáltalán nincs licencfájl?

Fő tanulság

Licencfájl nélkül nem használhatja a kódot. Ez nem azt jelenti, hogy „ingyenes”: éppen ellenkezőleg, licenc nélkül a kód továbbra is teljes egészében a szerző szerzői jogi védelme alatt áll, Önnek pedig nincs joga használni, másolni vagy módosítani. A GitHubon belüli megtekintési és forkolási engedély itt nem segít: nem ad jogot arra, hogy a kódot a termékébe illessze. Ha valóban szüksége van a kódra, az egyetlen tiszta megoldás, hogy ír a szerzőnek és engedélyt kér, vagy megvárja, amíg hozzáad egy licencet.

Gyakori hiba azt feltételezni, hogy ha nincs licenc, nincsenek korlátozások, így a kód szabadon használható. Ennek az ellenkezője igaz. A licenc hiánya nem engedély; alapértelmezés szerint azt jelenti, hogy nincs engedély. A licenc nélküli kód teljes egészében a szerző szerzői jogi védelme alatt áll, és nem nyúlhat hozzá.

Újra érvényes az az alapszabály, amellyel kezdtünk: a kódot alapértelmezés szerint szerzői jog védi, és kifejezett engedély nélkül nem másolhatja, módosíthatja vagy terjesztheti. A GitHubon belüli megtekintés és fork készítése nem töri át ezt a korlátot, és nem ad jogot arra, hogy a kódot saját termékében használja.

Mit tegyen a gyakorlatban, ha a kódnak nincs licence, de valóban szüksége van rá?

  1. Írjon a szerzőnek. Kérdezze meg közvetlenül a tároló beszélgetési felületén vagy e-mailben, hogy használhatja-e a kódot, és milyen feltételekkel. Néha a szerző egyszerűen elfelejtette hozzáadni a licencet, és kérésre pótolja.
  2. Keressen helyettesítőt. Szinte bármilyen feladathoz talál még egy, egy harmadik vagy akár egy tizedik hasonló tárolót; ezek között akad megfelelő MIT- vagy Apache-licencű is.
  3. Ne használja. Ha nincs engedélye és helyettesítő sincs, a kód nem az Öné, és nem teheti bele egy eladásra szánt termékbe. A „ki fogja megtudni?” gondolat kísértése éppen akkor ér véget rosszul, amikor a termék pénzt kezd termelni és figyelmet kap.

Mi van, ha Claude maga adott hozzá valaki más kódját a projekthez?

Fő tanulság

Ez külön eset, és fontos, hogy ne keverje össze egy tároló közvetlen átmásolásával. Ha Ön maga vesz át kódot egy konkrét tárolóból, be kell tartania annak licencét. Ha Claude vagy egy másik AI az Ön kérésére kódot hoz létre, általában saját, az adott feladatra összeállított szöveget készít valaki más fájljának másolata helyett; ilyenkor a kérdés a létrehozott kódhoz fűződő jogokra terelődik. Ha viszont az AI felismerhetően reprodukált egy licencelt kódrészletet, annak licencfeltételei továbbra is érvényesek. Mindkét esetben érdemes ellenőrizni a forrást.

Van itt egy második réteg is, amely könnyen összekeverhető az elsővel. Más a helyzet, amikor megnyit egy tárolót, és kimásol belőle egy fájlt: ilyenkor a licenccel kapcsolatos fentiek közvetlenül Önre vonatkoznak. És más az, amikor Claude egy kérésre kódot ír Önnek.

Szokásos esetben az AI saját, az Ön feladatára összeállított szöveget készít, nem valaki más fájljának másolatát. Ekkor más területre kerül át a kérdés: kié a létrehozott kód, és eladhatja-e? Ez önmagában is nagy téma, amelyről a kié az AI által írt kód című cikkben írtam.

Van azonban egy kivétel, amelyet érdemes észben tartani. Néha az AI szinte szó szerint előállítja valaki más kódjának egy felismerhető részletét, például egy teljes függvényt egy ismert könyvtárból. Ilyenkor a könyvtár licence továbbra is érvényes, függetlenül attól, hogy fizikailag ki nyomta le a billentyűket. Ezért a Claude által teljes egészében átvett nagy kész kódblokkokat úgy kell ellenőrizni, mintha Ön másolta volna ki őket.

Hogyan ellenőrizze a licencet a kód használata előtt: követendő lépések

Fő tanulság

A folyamat a következő: nyissa meg a tároló oldalát, és ellenőrizze a licenc nevét az oldalsávban; nyissa meg magát a LICENSE fájlt; állapítsa meg a típusát — megengedő (MIT, Apache, BSD) vagy copyleft (GPL, AGPL) —; vesse össze a saját helyzetével, majd döntsön a kód használatáról vagy egy helyettesítő kereséséről. Ha egyáltalán nincs licenc, ne használja a kódot. Az ellenőrzés néhány percet vesz igénybe, és még azelőtt kell elvégezni, hogy a kód bekerülne a projektbe, nem utána.

Foglaljuk össze az egészet egy rövid ellenőrzőlistában, amellyel bármilyen külső kódot megvizsgálhat, mielőtt beemeli a projektjébe. Haladjon fentről lefelé.

  1. Keresse meg a licenc nevét a tároló oldalán

    Nyissa meg a tárolót a GitHubon. A licenc neve rendszerint a jobb oldali oszlopban vagy a fájllista alatt látható, például: „MIT License”, „Apache-2.0” vagy „GPL-3.0”. Ha a mező üres, és nincs licencfájl, az már figyelmeztető jel; az utolsó lépésben térjen vissza erre.

  2. Nyissa meg magát a licencfájlt

    Keresse meg a fájllistában a LICENSE, LICENSE.md vagy COPYING fájlt, és nyissa meg. Győződjön meg róla, hogy a neve megegyezik az oldalsávban láthatóval, és hogy a licenc arra a kódra vonatkozik, amelyet használni szeretne, nem csak a tároló egy különálló részére.

  3. Állapítsa meg a típusát: megengedő vagy copyleft

    Az MIT, az Apache 2.0 és a BSD megengedő; zárt kereskedelmi termékben is használhatja a kódot. A GPL és az AGPL copyleft licencek; a forráskód-kötelezettségek megállapításához vizsgálja meg az érintett művet, a terjesztést és az AGPL esetleges hálózati feltételét. A név önmagában nem határozza meg, mely független komponensekre terjed ki a licenc.

  4. Vesse össze a saját helyzetével

    Válaszoljon három kérdésre: értékesíti-e a terméket, módosítja-e a kódot, és zártan szeretné-e tartani a forráskódot? Az MIT, az Apache és a BSD eladásra szánt, zárt termékhez is megfelelő. GPL és AGPL esetén állapítsa meg, mely érintett vagy összekapcsolt mű megfelelő forráskódját kellene átadnia és milyen feltétel váltja ki ezt; mérlegelje, teljesíteni tudja-e a kötelezettségeket.

  5. Licenc nélkül ne használja

    Ha nincs licencfájl, és a README semmit sem mond az engedélyről, nem használhatja a kódot. Írjon a szerzőnek engedélyért, vagy keressen egy megfelelő licencű, egyenértékű megoldást. A „nyilvánosan elérhető” nem jelent engedélyt.

Ez az ellenőrzés egészen addig tűnik fárasztónak, amíg a terméke növekedni nem kezd, pénzt nem hoz, és valaki rá nem kérdez a benne lévő külső kódra. Két perc az elején kevesebbe kerül, mint később egy vita rendezése. Külön írtam arról is, mit tegyen ezután a termékével, hogy ne akadjon el az indulás után: AI-val építettem terméket; mi következik.

Gyakran ismételt kérdések

Eladhat olyan terméket, amely valaki más GitHubon található kódját tartalmazza?

Igen, ha a kód megengedő licenccel rendelkezik — MIT, Apache 2.0 vagy BSD. Ezek engedik a kód kereskedelmi termékben való használatát és értékesítését, valamint azt, hogy saját forráskódját zártan tartsa; csak a licenc szövegét és az attribúciót kell megőriznie. A GPL és az AGPL is megengedi a kereskedelmi felhasználást, de a forráskód-kötelezettségek az érintett műtől, a terjesztéstől vagy az alkalmazandó AGPL hálózati feltételtől függnek. Licencfájl nélkül egyáltalán nem használhatja a kódot.

Mit jelent, ha egy GitHub-tárolónak nincs licence?

Azt jelenti, hogy nem használhatja a kódot. Alapértelmezés szerint a licenc hiánya nem jelent engedélyt; nem azt jelenti, hogy „ingyenes”. A kód továbbra is teljes egészében a szerző szerzői jogi védelme alatt áll. Az, hogy a tároló megtekinthető és fork készíthető róla a GitHubon belül, nem ad jogot arra, hogy a kódot a termékében használja. Ha szüksége van rá, írjon a szerzőnek engedélyért, vagy keressen egyenértékű, nyílt licencű megoldást.

Miben különbözik az MIT a GPL-től a termékem szempontjából?

Az MIT engedi a kód használatát és módosítását, a termék értékesítését, valamint azt, hogy saját forráskódját zártan tartsa — egyetlen kötelezettsége a licenc szövegének megőrzése. A GPL is megengedi a kereskedelmi felhasználást, de egy érintett összekapcsolt vagy származékos mű példányainak átadásakor teljesíteni kell a megfelelő forráskódra és az azonos licencre vonatkozó kötelezettségeket. A puszta szerveroldali futtatás példányátadás nélkül más eset, a különálló, független komponensekre pedig nem terjed ki automatikusan.

Kell tennem valamit, ha MIT-licencű kódot használok?

Igen, egy apróságot: őrizze meg a projektjében használt kód MIT-licencének szövegét és attribúciós sorát. Ez általában az eredeti kódhoz mellékelt LICENSE fájl. Az MIT mást nem követel — módosíthatja a kódot, eladhatja a terméket, és saját forráskódját zártan tarthatja.

Mi van, ha nem én, hanem maga Claude adta hozzá valaki más kódját?

A forrást akkor is ellenőriznie kell. Az AI rendszerint az Ön feladatára készíti el a saját szövegét; ilyenkor a kérdés a létrehozott kódhoz fűződő jogokra terelődik, ami külön téma. Ha viszont az AI szinte szó szerint reprodukálta valaki más felismerhető kódját egy ismert könyvtárból, annak a könyvtárnak a licence továbbra is érvényes. A Claude által teljes egészében átvett nagy kész kódblokkokat úgy ellenőrizze, ahogyan a saját másolatait ellenőrizné.

Nyissa meg az Ailootot.

További részletek

Kérdések és válaszok: GitHub-kód kereskedelmi termékben: licencek és ellenőrizendő tudnivalók

Egy GPL-könyvtár szerveroldali futtatása miatt közzé kell tennem a teljes webszolgáltatásomat?

A puszta futtatás példányátadás nélkül nem a GPL terjesztési feltétele. Ha a licenc hatálya alá tartozó összekapcsolt vagy származékos alkalmazást terjeszt, arra forráskód-kötelezettségek vonatkozhatnak; a független komponensekre nem terjed ki automatikusan.

Milyen további feltételt jelent az AGPLv3 egy webszolgáltatásnál?

A távoli hálózati kapcsolattartást támogató, módosított AGPL-programnak fel kell ajánlania a megfelelő forráskódját az érintett felhasználóknak. Az érintett programot és az integrációját vizsgálja meg, ne feltételezze sem azt, hogy soha nem kell forráskódot adni, sem azt, hogy minden független szolgáltatást meg kell nyitni.

Összes cikk