Koda z GitHuba v komercialnem izdelku: licence in kaj preveriti
MarkdownPermisivne licence MIT, Apache in BSD, copyleft licence GPL/AGPL, odsotnost datoteke LICENSE ter preverjanje izvora kode, ki jo doda AI.
Preberi celoten članek
Razvijate izdelek in na GitHubu najdete že pripravljeno rešitev: knjižnico, predlogo ali celoten projekt, ki počne natanko to, kar potrebujete. Claude predlaga, da jo vključite v svoj projekt. Nato se ustavite: koda je videti javno dostopna, toda ali jo res smete uporabiti, kaj šele prodajati izdelek, ki jo vsebuje? Ali vas lahko avtor pozneje toži?
Vse bom obravnaval po vrsti: zakaj odprta koda na GitHubu sama po sebi ne pomeni dovoljenja, katere licence dovoljujejo uporabo kode in prodajo izdelka, kateri pogoji copyleft lahko zahtevajo ustrezno izvorno kodo zajetega dela, ter kako pred uporabo kode v minuti preveriti licenco. Brez odgovora »odvisno od okoliščin«.
Praktične informacije o uporabi Ailootha so v dokumentaciji.
Pozor
To gradivo je informativno; nisem pravnik. Spodaj opisujem pogoje priljubljenih licenc in pravil ter dodajam povezave do primarnih virov, vendar svoj konkretni primer preverite glede na besedilo licence in se pri velikem komercialnem izdelku posvetujte tudi s pravnikom. Odločitev sprejmete sami.
Ali je res, da lahko brezplačno uporabljate kodo, če je na GitHubu?
Glavno sporočilo
Ne. Dejstvo, da je koda na voljo za ogled, še ne pomeni, da jo smete uporabiti pri svojem delu. Privzeto je vsa koda zaščitena z avtorskimi pravicami in je ne smete uporabiti, razen če je avtor posebej podelil dovoljenje. Sama objava na GitHubu drugim omogoča le ogled repozitorija in ustvarjanje kopije znotraj GitHuba. Pravico do vključitve te kode v svoj izdelek daje licenca, ki jo je avtor priložil repozitoriju. GitHub je ne podeljuje.
Glavna past je beseda »odprta«. Izvorno kodo lahko vidite, zato se zdi, da jo smete uporabiti, ker ni skrita. Takšno razmišljanje je napačno. »Odprta za branje« in »licencirana za uporabo« pomenita različni stvari.
Privzeto so vsa ustvarjalna dela, vključno s kodo, zaščitena z avtorskimi pravicami od trenutka nastanka. Dokler avtor izrecno ne podeli dovoljenja, jih ne smete uporabiti. Tako GitHub pojasnjuje na svoji strani z informacijami o licencah.
Ko ustvarite avtorsko delo (in tudi koda je avtorsko delo), je to privzeto zaščiteno z izključnimi avtorskimi pravicami. Če ne priložite licence, ki določa drugače, nihče drug ne sme kopirati, distribuirati ali spreminjati vašega dela, ne da bi tvegal zahtevek ali tožbo.
Druga raven je sam GitHub. Ljudje menijo, da lahko uporabljajo kodo drugih, ker so z objavo kode sprejeli pravila GitHuba. Pravila določajo ravno nasprotno. Ko avtor repozitorij nastavi kot javni, drugim dovoli le, da si ga ogledajo in ustvarijo fork — torej kopijo znotraj samega GitHuba. To ne dovoljuje uporabe kode pri vašem lastnem delu.
Z javno objavo repozitorija drugim uporabnikom podelite neizključno, svetovno licenco za uporabo, prikazovanje in razmnoževanje (z ustvarjanjem forkov) svojega gradiva prek storitve, v okviru funkcij GitHuba. Dodatne pravice lahko podelite tako, da priložite licenco.
Ključne besede so v zadnjem stavku: »v okviru funkcij GitHuba« in »dodatne pravice se podelijo z licenco«. Fork ostane znotraj GitHuba. Ko želite kodo uporabiti v svojem izdelku, kaj šele ga prodajati, potrebujete ločeno licenco avtorja. Brez licence ni pravice, tudi če je koda povsem na očeh.
Kaj določa, ali lahko uporabite kodo nekoga drugega?
Glavno sporočilo
To določa licenčna datoteka v repozitoriju, ki se običajno imenuje LICENSE ali LICENSE.md. Gre za avtorjevo dovoljenje, ki določa, kaj smete in česa ne smete početi s kodo. Licenca odgovarja na tri vprašanja: ali lahko kodo uporabite v komercialnem izdelku, ali jo lahko spreminjate in ali lahko svojo izvorno kodo ohranite zaprto? Različne licence na ta vprašanja odgovarjajo različno, zato najprej preverite to datoteko in šele nato odprite samo kodo.
Vse se vrti okoli ene datoteke. Dobro vzdrževan repozitorij vsebuje licenčno datoteko — običajno LICENSE, včasih LICENSE.md, ali pa je licenca navedena neposredno v README. To je avtorjevo dovoljenje, ki določa pogoje uporabe kode. GitHub ime licence običajno prikaže v stranski vrstici strani repozitorija, še preden odprete samo datoteko.
Da se ne bi izgubili v pravnem jeziku, je koristno licenco prebrati skozi tri vprašanja o vašem primeru:
- Ali lahko to kodo uporabite v komercialnem izdelku, za katerega ljudje plačajo?
- Ali lahko kodo spreminjate za svoje potrebe?
- Ali morate pozneje objaviti izvorno kodo svojega izdelka ali jo lahko ohranite zaprto?
Skoraj vse razlike med licencami izhajajo iz različnih odgovorov na tretje vprašanje. Na prvi dve priljubljene odprte licence najpogosteje odgovorijo z »da«: uporabite jo, spreminjajte jo, prodajajte jo. Ljudje se spotaknejo ob vprašanje, ali jih bo licenca prisilila k objavi lastne kode. V nadaljevanju bomo glavne vrste obravnavali s temi tremi vprašanji.
Katere licence dovoljujejo uporabo kode in prodajo izdelka?
Glavno sporočilo
Za komercialni izdelek so najprimernejše permisivne licence: MIT, Apache 2.0 in BSD. Dovoljujejo skoraj vse: uporabo kode, njeno spreminjanje, prodajo izdelka in ohranitev lastne izvorne kode kot zaprte. Obveznost je ena: ohraniti besedilo licence in navedbo avtorstva. Apache 2.0 ščiti tudi pred patentnimi zahtevki in zahteva označitev spremenjenih datotek. Če ima koda nekoga drugega eno od teh licenc, jo lahko varno uporabite v komercialnem izdelku.
Začnimo z dobro novico. Za nekoga, ki razvija izdelek za prodajo, je najboljša izbira skupina licenc, imenovana permisivne licence. Obstaja jih več, vendar so najpogostejše tri: MIT, Apache 2.0 in BSD. Vse tri na prvi dve vprašanji odgovorijo z »da« in vam dovolijo, da lastno izvorno kodo ohranite zaprto.
Najpogostejša in najpreprostejša je MIT. Njeno besedilo se prilega enemu odstavku.
S tem se brezplačno podeljuje dovoljenje vsaki osebi, ki pridobi kopijo te programske opreme, da jo uporablja brez omejitev, vključno s pravicami do uporabe, kopiranja, spreminjanja, združevanja, objavljanja, distribuiranja, podeljevanja podlicenc in prodaje kopij, pod pogojem, da sta zgornje obvestilo o avtorskih pravicah in to obvestilo o dovoljenju vključena v vse kopije.
Preprosteje povedano, MIT vam dovoljuje skoraj vse s kodo, vključno s prodajo izdelka in ohranitvijo lastne izvorne kode kot zaprte. Edina obveznost je, da vključite besedilo licence in navedbo avtorstva. Babel, .NET in Rails so na primer izdani pod licenco MIT, zato ste skoraj zagotovo že uporabljali kodo s to licenco.
Apache 2.0 deluje podobno, vendar dodaja dve pomembni točki. Prvič, izrecno varstvo pred patentnimi zahtevki: avtorji kode obljubljajo, da vas ne bodo tožili zaradi patentov na tej kodi. Drugič, nekaj dodatnih formalnih zahtev za uporabo.
Reproducirate in distribuirate lahko kopije dela ali izpeljanih del v katerem koli mediju, s spremembami ali brez njih, če prejemnikom izročite kopijo te licence, označite spremenjene datoteke, ohranite obvestila o avtorskih pravicah in patentih ter priložite berljivo kopijo datoteke NOTICE, če ta obstaja.
BSD (v različicah z 2 in 3 klavzulami) je v bistvu podobna licenci MIT: uporabite jo, spremenite jo, prodajte jo in ohranite obvestilo o avtorskih pravicah. Vse tri licence sem združil v tabelo, da lahko na hitro vidite razlike.
| Licenca | Prodaja izdelka | Ohranitev zaprte izvorne kode | Kaj morate storiti | Patentno varstvo |
|---|---|---|---|---|
| MIT | da | da | ohraniti obvestilo o avtorskih pravicah in besedilo licence | brez določbe |
| Apache 2.0 | da | da | obvestilo o avtorskih pravicah, datoteka NOTICE, označiti spremembe | da |
| BSD (2 in 3 klavzule) | da | da | ohraniti obvestilo o avtorskih pravicah | ne |
Kako to uporabiti v svojem primeru: če pri kodi nekoga drugega vidite MIT, Apache 2.0 ali BSD, ste lahko brez skrbi: uporabite jo lahko v komercialnem izdelku, jo spremenite in lastno izvorno kodo ohranite zaprto. Paziti morate le, da ne odstranite licenčne datoteke in navedbe avtorstva za prevzeti del.
Kako veljajo obveznosti izvorne kode GPL in AGPL?
Bistvo
GPL in AGPL dovoljujeta komercialno uporabo. Obveznosti izvorne kode GPL nastanejo pri posredovanju zajetega dela; običajno izvajanje na strežniku brez prenosa kopije ni tak sprožilec. AGPLv3 doda ponudbo izvorne kode uporabnikom, ki na daljavo komunicirajo s spremenjeno različico. Ugotovite, katero združeno delo je zajeto: ločene neodvisne komponente niso samodejno vse del tega dela.
Copyleft ob ustreznih pogojih ohranja zajeto delo in njegove predelave pod isto licenco. Pri GPLv3 razširjanje izvornih ali objektnih kopij zajetega oziroma združenega izpeljanega dela zahteva izpolnjevanje licence in obveznosti ustrezne izvorne kode. Ne zajame samodejno vsakega neodvisnega programa v istem izdelku ali strežniku.
Vzemimo spletno storitev. Gostovanje knjižnice GPL na lastnem strežniku brez izročanja kopij uporabnikom samo po sebi ne zahteva objave celotne storitve. Razširjanje zajete združene aplikacije strankam lahko sproži obveznosti GPL; pred odločitvijo o potrebni izvorni kodi preverite povezavo kode in licenco. Odjemalec za brskalnik, dostavljen uporabnikom, je ločeno vprašanje razširjanja.
AGPLv3 doda omrežni pogoj: če program spremenite in uporabniki s to različico komunicirajo na daljavo, jim mora vidno ponuditi ustrezno izvorno kodo. To je natančneje kot trditev, da samo gostovanje katere koli komponente AGPL odpre vsak neodvisni del storitve.
Pri lastniškem izdelku preglejte zajeto delo, kombiniranje komponent, razširjanje kopij in morebitno omrežno interakcijo AGPL. Če ne morete izpolniti ustreznih obveznosti, izberite združljivo permisivno možnost ali pridobite ločeno dovoljenje. Komercialna uporaba je dovoljena; vprašanje je skladnost z dejansko licenco in povezavo komponent.
Kaj storiti, če repozitorij sploh nima licenčne datoteke?
Glavno sporočilo
Če licenčne datoteke ni, kode ne smete uporabiti. To ne pomeni, da je »brezplačna«; nasprotno, brez licence ostane koda v celoti zaščitena z avtorskimi pravicami avtorja, vi pa je nimate pravice uporabljati, kopirati ali spreminjati. Dovoljenje za ogled in ustvarjanje forka znotraj GitHuba tu ne pomaga — ne daje vam pravice, da kodo vključite v svoj izdelek. Če kodo res potrebujete, je edina čista pot, da pišete avtorju in ga prosite za dovoljenje, ali počakate, da doda licenco.
Pogosta napaka je predpostavka, da brez licenčne datoteke ni omejitev in lahko kodo prosto uporabljate. Velja nasprotno. Odsotnost licence ni dovoljenje; privzeto pomeni, da dovoljenja ni. Koda brez licence ostane v celoti zaščitena z avtorskimi pravicami avtorja in se je ne smete dotakniti.
Ponovno velja pravilo, s katerim smo začeli: koda je privzeto zaščitena z avtorskimi pravicami, brez izrecnega dovoljenja pa je ne smete kopirati, spreminjati ali distribuirati. Možnost ogleda in ustvarjanja forka znotraj GitHuba te ovire ne odpravi — ne daje vam pravice do uporabe kode v lastnem izdelku.
Kaj storiti v praksi, če koda nima licence, vendar jo res potrebujete:
- Pišite avtorju. V razdelku za razprave v repozitoriju ali po e-pošti neposredno vprašajte, ali lahko uporabite kodo in pod kakšnimi pogoji. Včasih je avtor samo pozabil dodati licenco in jo bo dodal, če ga prosite.
- Poiščite nadomestilo. Skoraj za vsako nalogo obstaja drug, tretji ali deseti podoben repozitorij; med njimi boste našli takšnega z ustrezno licenco MIT ali Apache.
- Ne uporabite je. Če nimate dovoljenja in ni nadomestne rešitve, koda ni vaša in je ne smete vključiti v izdelek, ki ga nameravate prodajati. Mikavna misel »kdo bo pa izvedel?« se slabo konča ravno takrat, ko začne izdelek prinašati denar in vzbujati pozornost.
Kaj če je Claude sam dodal kodo nekoga drugega v projekt?
Glavno sporočilo
To je ločen primer, ki ga ne smemo zamenjati z neposrednim kopiranjem repozitorija. Ko sami vzamete kodo iz določenega repozitorija, morate upoštevati njegovo licenco. Ko Claude ali drug AI ustvari kodo kot odgovor na vašo zahtevo, običajno ustvari lastno besedilo, sestavljeno za nalogo, namesto da bi kopiral datoteko nekoga drugega, zato se vprašanje premakne k pravicam na ustvarjeni kodi. Če pa AI očitno reproducira prepoznaven del licencirane kode nekoga drugega, pogoji licence še vedno veljajo. V obeh primerih je vredno preveriti izvor.
Tu je še ena plast, ki jo je lahko zamenjati s prvo. Nekaj drugega je, ko obiščete repozitorij in iz njega kopirate datoteko: takrat ste neposredno odgovorni za vse zgoraj navedeno glede licence. Nekaj drugega pa je, ko Claude napiše kodo kot odgovor na vašo zahtevo.
V običajnih primerih AI ustvari lastno besedilo, sestavljeno za vašo nalogo, namesto kopije datoteke nekoga drugega. Nato se vprašanje premakne na drugo področje: kdo je lastnik ustvarjene kode in ali jo lahko prodajate? To je obsežna tema zase, o kateri sem pisal v članku o tem, kdo je lastnik kode, napisane z AI.
Vendar je treba upoštevati izjemo. Včasih AI skoraj dobesedno ustvari prepoznaven del kode nekoga drugega — celotno funkcijo iz znane knjižnice. V tem primeru še vedno velja licenca knjižnice, ne glede na to, kdo je fizično pritisnil tipke. Zato je treba velike že pripravljene bloke, ki jih Claude prevzame v celoti, preveriti enako, kot bi preverili bloke, ki bi jih kopirali sami.
Kako pred uporabo kode preveriti licenco: koraki
Glavno sporočilo
Postopek je naslednji: odprite stran repozitorija in preverite ime licence v stranski vrstici, odprite samo datoteko LICENSE, določite vrsto licence — permisivna (MIT, Apache, BSD) ali copyleft (GPL, AGPL) —, jo primerjajte s svojim primerom ter se odločite, ali boste uporabili kodo ali poiskali nadomestilo. Če licence sploh ni, kode ne uporabite. Celotno preverjanje traja nekaj minut in ga opravite, preden koda vstopi v projekt, ne pozneje.
Vse skupaj strnimo v kratek kontrolni seznam za preverjanje kode tretjih oseb, preden jo vključite v svoj projekt. Sledite korakom od zgoraj navzdol.
Poiščite ime licence na strani repozitorija
Odprite repozitorij na GitHubu. Ime licence je običajno vidno v desnem stolpcu ali pod seznamom datotek, na primer »MIT License«, »Apache-2.0« ali »GPL-3.0«. Če je polje prazno in ni licenčne datoteke, je to že opozorilni znak; k temu se vrnite v zadnjem koraku.
Odprite samo licenčno datoteko
Na seznamu datotek poiščite LICENSE, LICENSE.md ali COPYING in jo odprite. Preverite, ali se ime ujema s tistim v stranski vrstici in ali licenca velja za kodo, ki jo uporabljate, ne le za ločen del repozitorija.
Ugotovite vrsto: permisivna ali copyleft
MIT, Apache 2.0 in BSD so permisivne; kodo lahko uporabite v zaprtem komercialnem izdelku. GPL in AGPL sta copyleft; pred določitvijo obveznosti izvorne kode preverite zajeto delo, razširjanje in morebitni omrežni pogoj AGPL. Samo ime ne določa zajetosti neodvisnih komponent.
Primerjajte licenco s svojim primerom
Odgovorite na tri vprašanja: ali izdelek prodajate, ali spreminjate kodo in ali želite izvorno kodo ohraniti zaprto? MIT, Apache in BSD so primerni za zaprt izdelek za prodajo. Pri GPL in AGPL ugotovite, katero zajeto ali združeno delo potrebuje ustrezno izvorno kodo in kdaj se obveznost sproži; ocenite izpolnljivost teh pogojev.
Če licence ni, kode ne uporabite
Če ni licenčne datoteke in README ne pove ničesar o dovoljenju, kode ne smete uporabiti. Pišite avtorju in prosite za dovoljenje ali poiščite enakovredno rešitev z ustrezno licenco. »Javno dostopna« ne pomeni, da imate dovoljenje.
To preverjanje se zdi zamudno vse do prvega trenutka, ko vaš izdelek zraste, začne prinašati denar in vas nekdo vpraša o kodi tretjih oseb, ki jo vsebuje. Dve minuti na začetku staneta manj kot poznejše reševanje spora. Ločeno sem opisal, kaj storiti z izdelkom po tem, da se po zagonu ne ustavi: Z AI sem razvil izdelek; kaj sledi.
Pogosta vprašanja
Ali lahko prodajate izdelek, ki vsebuje kodo nekoga drugega z GitHuba?
Da, če ima koda permisivno licenco — MIT, Apache 2.0 ali BSD. Dovoljujejo uporabo kode v komercialnem izdelku, njegovo prodajo in ohranitev lastne izvorne kode kot zaprte; zahtevajo samo, da ohranite besedilo licence in navedbo avtorstva. Tudi GPL in AGPL dovoljujeta komercialno uporabo, obveznosti izvorne kode pa so odvisne od zajetega dela in razširjanja ali ustreznega omrežnega sprožilca AGPL. Če licenčne datoteke ni, kode sploh ne smete uporabiti.
Kaj pomeni, če GitHubov repozitorij nima licence?
Pomeni, da kode ne smete uporabiti. Odsotnost licence privzeto pomeni, da dovoljenja ni; ne pomeni »brezplačno«. Koda ostane v celoti zaščitena z avtorskimi pravicami avtorja. Možnost ogleda in ustvarjanja forka repozitorija znotraj GitHuba vam ne daje pravice, da kodo uporabite v svojem izdelku. Če jo potrebujete, pišite avtorju in prosite za dovoljenje ali poiščite enakovredno rešitev z odprto licenco.
Kakšna je za moj izdelek razlika med MIT in GPL?
MIT vam dovoljuje uporabo in spreminjanje kode, prodajo izdelka ter ohranitev lastne izvorne kode kot zaprte — edina obveznost je ohraniti besedilo licence. GPL prav tako dovoljuje komercialno uporabo, posredovanje zajetega združenega ali izpeljanega dela pa zahteva izpolnjevanje obveznosti ustrezne izvorne kode in iste licence. Samo gostovanje brez prenosa kopije je drugačno, ločene neodvisne komponente pa niso samodejno zajete.
Ali moram kaj storiti, če uporabim kodo pod licenco MIT?
Da, eno manjšo stvar: ohraniti morate besedilo licence MIT in navedbo avtorstva za kodo, ki ste jo uporabili v svojem projektu. Običajno je to ista datoteka LICENSE, priložena izvirniku. MIT ne zahteva ničesar drugega — kodo lahko spreminjate, izdelek prodajate in svojo izvorno kodo ohranite zaprto.
Kaj če je kodo nekoga drugega dodal Claude, ne pa jaz?
Vseeno preverite izvor. AI običajno ustvari lastno besedilo za vašo nalogo, zato se vprašanje premakne k pravicam na ustvarjeni kodi — to je ločena tema. Če pa AI skoraj dobesedno reproducira prepoznaven del kode nekoga drugega iz znane knjižnice, licenca te knjižnice še vedno velja. Velike že pripravljene bloke, prevzete v celoti, preverite enako kot tiste, ki bi jih sami kopirali in prilepili.
Viri
- choosealicense.com - referenčni projekt GitHub za izbiro licence
- choosealicense.com - kaj pomeni, če licence ni
- Pogoji storitve GitHub, razdelek D (podelitev licence drugim uporabnikom)
- Licenca MIT (opensource.org)
- Licenca Apache 2.0 (apache.org)
- GNU General Public License v3.0 (gnu.org)
- GNU Affero General Public License v3.0 (gnu.org)
Več podrobnosti
Vprašanja in odgovori: Koda z GitHuba v komercialnem izdelku: licence in kaj preveriti
Ali gostovanje knjižnice GPL zahteva objavo celotne spletne storitve?
Samo gostovanje brez prenosa kopij ni sprožilec razširjanja GPL. Pri razširjanju zajete združene ali izpeljane aplikacije lahko obveznosti izvorne kode veljajo za to delo; neodvisne komponente niso samodejno zajete.
Kateri dodatni pogoj doda AGPLv3 spletni storitvi?
Spremenjeni program AGPL s podporo oddaljeni omrežni interakciji mora tem uporabnikom ponuditi ustrezno izvorno kodo. Preverite zajeti program in povezavo, namesto da predpostavljate odsotnost izvorne obveznosti ali odprtje vsake neodvisne storitve.