Tinklaraštis

GitHub kodas komerciniame produkte: licencijos ir ką patikrinti

Markdown

Leidžiančios MIT, Apache ir BSD licencijos, copyleft GPL/AGPL licencijos, LICENSE failo nebuvimas ir AI pridėto kodo kilmės tikrinimas.

Skaityti visą straipsnį

Kuriate produktą ir GitHub randate paruoštą dalį: biblioteką, šabloną ar visą projektą, kuris atlieka būtent tai, ko jums reikia. Claude pasiūlo įtraukti jį į jūsų projektą. Ir tada stabtelite: atrodo, kad kodas viešai prieinamas, bet ar tikrai galite jį naudoti, juolab parduoti produktą, kuriame jis naudojamas? Ar autorius vėliau gali imtis prieš jus teisinių veiksmų?

Viską aptarsiu iš eilės: kodėl atviras kodas GitHub savaime nesuteikia leidimo, kurios licencijos leidžia naudoti kodą ir parduoti produktą, kurios copyleft sąlygos gali reikalauti atitinkamo apimamo kūrinio pirminio kodo ir kaip prieš naudojant kodą per minutę patikrinti licenciją. Be jokio „tai priklauso nuo situacijos“.

Praktinės informacijos apie darbą su Ailoot rasite dokumentacijoje.

Dėmesio

Ši medžiaga skirta informaciniams tikslams; nesu teisininkas. Toliau aprašau populiarių licencijų ir taisyklių sąlygas bei pateikiu nuorodas į pirminius šaltinius, tačiau savo konkrečią situaciją įvertinkite pagal licencijos tekstą, o jei produktas didelis ir komercinis, pasitarkite su teisininku. Sprendimą priimate patys.

Ar tiesa, kad jei kodas yra GitHub, galite jį naudoti nemokamai?

Pagrindinė mintis

Ne. Tai, kad kodą galima peržiūrėti, nereiškia, kad jums leidžiama jį naudoti savo darbe. Pagal numatytąją tvarką visas kodas saugomas autorių teisių, todėl negalite jo naudoti, nebent autorius atskirai suteikė leidimą. Paskelbimas GitHub savaime leidžia kitiems tik peržiūrėti saugyklą ir sukurti jos kopiją GitHub platformoje. Teisę įtraukti tą kodą į savo produktą suteikia licencija, kurią autorius pridėjo prie saugyklos. Pats GitHub tokios teisės nesuteikia.

Pagrindinė čia slypinti pinklė — žodis „atviras“. Matote pirminį kodą, todėl atrodo, kad jei jis nebuvo paslėptas, galite jį naudoti. Tokia logika klaidinga. „Atviras skaityti“ ir „licencijuotas naudoti“ yra skirtingi dalykai.

Pagal numatytąją tvarką kiekvienas kūrybinis darbas, įskaitant kodą, saugomas autorių teisių nuo pat jo sukūrimo. Kol autorius aiškiai nesuteikė leidimo, negalite jo naudoti. Taip GitHub tai aprašo savo licencijų informaciniame puslapyje.

Sukūrus kūrybinį darbą (o kodas taip pat yra kūrybinis darbas), pagal numatytąją tvarką jis saugomas išimtinėmis autorių teisėmis. Jei nepridėsite licencijos, kurioje nurodyta kitaip, niekas kitas negali kopijuoti, platinti ar keisti jūsų darbo nerizikuodamas sulaukti pretenzijos ar ieškinio.

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

Antrasis sluoksnis — pats GitHub. Žmonės mano, kad sutikę su GitHub taisyklėmis paskelbdami kodą jie taip pat gali naudoti kitų žmonių kodą iš ten. Taisyklėse pasakyta visiškai priešingai. Padaręs saugyklą viešą, autorius leidžia kitiems tik ją peržiūrėti ir sukurti fork, t. y. padaryti kopiją pačiame GitHub. Tai nesuteikia teisės naudoti kodą savo darbe.

Padarę saugyklą viešą, suteikiate kitiems naudotojams neišimtinę, pasaulinę licenciją naudoti, rodyti ir atkurti (sukuriant fork) jūsų medžiagą per paslaugą, pagal GitHub funkcijas. Papildomų teisių galite suteikti pridėdami licenciją.

— GitHub paslaugų teikimo sąlygos, D skyrius, https://docs.github.com/en/site-policy/github-terms/github-terms-of-service

Svarbiausi žodžiai yra paskutiniame sakinyje: „pagal GitHub funkcijas“ ir „papildomas teises suteikia licencija“. Fork lieka GitHub platformoje. Vos tik norėsite naudoti kodą savo produkte, juolab jį parduoti, jums reikės atskiros autoriaus licencijos. Jei licencijos nėra, teisės taip pat nėra — net jei kodas yra tiesiai prieš jūsų akis.

Kas lemia, ar galite naudoti kieno nors kito kodą?

Pagrindinė mintis

Tai saugykloje esantis licencijos failas, paprastai pavadintas LICENSE arba LICENSE.md. Tai autoriaus leidimas, kuriame nurodyta, ką su kodu galite ir ko negalite daryti. Licencija atsako į tris klausimus: ar galite naudoti kodą komerciniame produkte, ar galite jį keisti ir ar galite savo pirminį kodą palikti uždarą? Skirtingos licencijos į juos atsako skirtingai, todėl pirmiausia reikia patikrinti šį failą ir tik tada atverti patį kodą.

Viskas priklauso nuo vieno failo. Tinkamai prižiūrimoje saugykloje yra licencijos failas — paprastai LICENSE, kartais LICENSE.md arba nuoroda tiesiogiai README faile. Tai autoriaus leidimas, kuriame nustatytos kodo naudojimo sąlygos. GitHub paprastai rodo licencijos pavadinimą saugyklos puslapio šoniniame skydelyje dar prieš atveriant patį failą.

Kad nepasiklystumėte teisinėje kalboje, licenciją verta perskaityti atsakant į tris klausimus apie savo situaciją:

  1. Ar galite naudoti šį kodą komerciniame produkte, už kurį žmonės moka?
  2. Ar galite keisti kodą pagal savo poreikius?
  3. Ar vėliau turite atverti savo produkto pirminį kodą, ar galite jį palikti uždarą?

Beveik visi licencijų skirtumai susiję su skirtingais atsakymais į trečiąjį klausimą. Į pirmuosius du populiarios atvirojo kodo licencijos dažniausiai atsako „taip“: naudokite, keiskite, parduokite. Tačiau žmonės suklumpa ties klausimu, ar licencija įpareigos atverti jūsų pačių kodą. Toliau aptarsime pagrindinius tipus, remdamiesi šiais trimis klausimais.

Kurios licencijos leidžia naudoti kodą ir parduoti produktą?

Pagrindinė mintis

Komerciniam produktui patogiausios yra leidžiančios licencijos: MIT, Apache 2.0 ir BSD. Jos leidžia beveik viską: naudoti ir keisti kodą, parduoti produktą bei savo pirminį kodą palikti uždarą. Yra viena pareiga: išsaugoti licencijos tekstą ir autorystės nurodymą. Apache 2.0 taip pat apsaugo nuo patentinių pretenzijų ir reikalauja pažymėti pakeistus failus. Jei kieno nors kito kodui taikoma viena iš šių licencijų, galite saugiai jį naudoti komerciniame produkte.

Pradėkime nuo gerų žinių. Jei kuriate parduoti skirtą produktą, geriausias pasirinkimas yra grupė licencijų, vadinamų leidžiančiomis. Jų yra kelios, bet dažniausiai pasitaiko trys: MIT, Apache 2.0 ir BSD. Į pirmuosius du klausimus visos trys atsako „taip“ ir leidžia savo pirminį kodą palikti uždarą.

Dažniausia ir paprasčiausia yra MIT licencija. Jos tekstas telpa į vieną pastraipą.

Šiuo dokumentu nemokamai suteikiamas leidimas bet kuriam asmeniui, gaunančiam šios programinės įrangos kopiją, naudoti ją be apribojimų, įskaitant teises naudoti, kopijuoti, keisti, jungti, publikuoti, platinti, sublicencijuoti ir parduoti kopijas, su sąlyga, kad visose kopijose būtų pateiktas pirmiau nurodytas pranešimas apie autorių teises ir šis leidimo pranešimas.

— MIT licencija, opensource.org, https://opensource.org/license/mit

Paprastai tariant, MIT leidžia su kodu daryti beveik viską, įskaitant produkto pardavimą ir savo pirminio kodo laikymą uždaro. Vienintelė pareiga — įtraukti licencijos tekstą ir autorystės eilutę. Pavyzdžiui, Babel, .NET ir Rails išleidžiami pagal MIT licenciją, todėl beveik neabejotinai jau esate naudoję kodą su šia licencija.

Apache 2.0 veikia panašiai, bet prideda du svarbius dalykus. Pirma, aiški apsauga nuo patentinių pretenzijų: kodo autoriai žada jūsų nepaduoti į teismą dėl šio kodo patentų. Antra, kelis papildomus formalius naudojimo reikalavimus.

Galite atkurti ir platinti kūrinio arba išvestinių kūrinių kopijas bet kokioje laikmenoje, su pakeitimais ar be jų, jei gavėjams pateikiate šios licencijos kopiją, pažymite pakeistus failus, išsaugote autorių teisių ir patentų pranešimus ir pridedate įskaitomą NOTICE failo kopiją, jei toks yra.

— Apache licencija 2.0, 4 skyrius, https://www.apache.org/licenses/LICENSE-2.0

BSD (2 ir 3 sąlygų versijos) iš esmės panaši į MIT: naudokite, keiskite, parduokite ir išsaugokite autorių teisių pranešimą. Visas tris licencijas sudėjau į lentelę, kad skirtumą matytumėte iš pirmo žvilgsnio.

LicencijaProdukto pardavimasPirminio kodo palikimas uždaroKą privalote padarytiPatentų apsauga
MITtaiptaipišsaugoti autorių teisių pranešimą ir licencijos tekstąnėra nuostatos
Apache 2.0taiptaipautorių teisių pranešimas, NOTICE failas, pakeitimų žymėjimastaip
BSD (2 ir 3 sąlygos)taiptaipišsaugoti autorių teisių pranešimąne

Kaip tai taikyti savo atveju: jei kieno nors kito kode matote MIT, Apache 2.0 arba BSD, galite būti ramūs: galite jį naudoti komerciniame produkte, keisti ir savo pirminį kodą palikti uždarą. Tik nepašalinkite licencijos failo ir autorystės nurodymo iš panaudotos dalies.

Kaip taikomos GPL ir AGPL pirminio kodo pareigos?

Pagrindinė mintis

GPL ir AGPL leidžia komercinį naudojimą. GPL pirminio kodo pareigos atsiranda perduodant apimamą kūrinį; įprastas naudojimas serveryje neperduodant kopijos nėra šis pagrindas. AGPLv3 prideda kodo pasiūlymo reikalavimą naudotojams, nuotoliniu būdu bendraujantiems su pakeista versija. Nustatykite, kuris sujungtas kūrinys apimamas: atskiri nepriklausomi komponentai automatiškai netampa jo dalimi.

Copyleft išlaiko apimamą kūrinį ir jo išvestinius darbus pagal tą pačią licenciją, kai taikomos atitinkamos sąlygos. Pagal GPLv3 platinant apimamo ar sujungto išvestinio kūrinio pradinio ar objektinio kodo kopijas reikia laikytis licencijos ir atitinkamo pirminio kodo pareigų. Tai automatiškai netaikoma kiekvienai nepriklausomai programai tame pačiame produkte ar serveryje.

Paimkime internetinės paslaugos pavyzdį. GPL bibliotekos laikymas savo serveryje, nesuteikiant naudotojams kopijų, savaime nereikalauja paskelbti visos paslaugos. Apimamos sujungtos programos platinimas klientams gali sužadinti GPL pareigas; prieš spręsdami, kokį kodą pridėti, patikrinkite integraciją ir licenciją. Naudotojui pateikiamas naršyklės klientas yra atskiras platinimo klausimas.

AGPLv3 prideda tinklo sąlygą: pakeitus programą, su kurios versija naudotojai sąveikauja nuotoliniu būdu, jiems turi būti aiškiai pasiūlytas tos versijos atitinkamas pirminis kodas. Tai tiksliau nei sakyti, kad vien bet kurio AGPL komponento talpinimas atveria visas nepriklausomas paslaugos dalis.

Nuosavybiniam produktui išnagrinėkite apimamą kūrinį, komponentų jungimą, kopijų platinimą ir ar taikoma AGPL tinklo sąveika. Jei negalite įvykdyti pareigų, rinkitės suderinamą leidžiančią alternatyvą ar gaukite atskirą leidimą. Pats komercinis naudojimas leidžiamas; svarbu laikytis tikros licencijos ir integracijos sąlygų.

Ką daryti, jei saugykloje visai nėra licencijos failo?

Pagrindinė mintis

Jei licencijos failo nėra, kodo naudoti negalite. Tai nereiškia, kad jis „nemokamas“: priešingai, be licencijos kodas lieka visiškai saugomas autoriaus autorių teisių, o jūs neturite teisės jo naudoti, kopijuoti ar keisti. Leidimas peržiūrėti ir sukurti fork GitHub platformoje čia nepadeda — jis nesuteikia teisės įdėti kodo į savo produktą. Jei kodo tikrai reikia, vienintelis tvarkingas kelias — parašyti autoriui ir paprašyti leidimo arba palaukti, kol jis pridės licenciją.

Dažna klaida — manyti, kad jei licencijos nėra, nėra ir apribojimų, todėl kodą galima laisvai naudoti. Yra priešingai. Licencijos nebuvimas nėra leidimas; pagal numatytąją tvarką tai reiškia, kad leidimo nėra. Kodas be licencijos lieka visiškai saugomas autoriaus autorių teisių, todėl negalite jo naudoti.

Vėl galioja taisyklė, nuo kurios pradėjome: pagal numatytąją tvarką kodas saugomas autorių teisių, o be aiškaus leidimo negalite jo kopijuoti, keisti ar platinti. Galimybė jį peržiūrėti ir sukurti fork GitHub platformoje šio barjero nepašalina — ji nesuteikia teisės naudoti kodo savo produkte.

Ką daryti praktiškai, jei kodas neturi licencijos, bet jums jo tikrai reikia:

  1. Parašykite autoriui. Tiesiogiai saugyklos diskusijų skiltyje arba el. paštu paklauskite, ar galite naudoti kodą ir kokiomis sąlygomis. Kartais autorius tiesiog pamiršo pridėti licenciją ir ją pridės, jei paprašysite.
  2. Ieškokite pakaitalo. Beveik kiekvienai užduočiai yra antra, trečia ar dešimta panaši saugykla — tarp jų rasite tokią, kuriai taikoma tinkama MIT arba Apache licencija.
  3. Nenaudokite jo. Jei neturite leidimo ir pakaitalo nėra, kodas jums nepriklauso ir negalite jo įtraukti į produktą, kurį ketinate parduoti. Mintis „kas apie tai sužinos?“ baigiasi blogai kaip tik tada, kai produktas pradeda uždirbti pinigus ir traukti dėmesį.

O jei kieno nors kito kodą į projektą pridėjo pats Claude?

Pagrindinė mintis

Tai atskiras atvejis, kurio svarbu nepainioti su tiesioginiu saugyklos kopijavimu. Kai patys paimate kodą iš konkrečios saugyklos, privalote laikytis jos licencijos. Kai Claude ar kita AI sistema sugeneruoja kodą atsakydama į jūsų užklausą, ji paprastai sukuria savo tekstą pagal užduotį, o ne nukopijuoja kieno nors kito failą; tuomet klausimas pereina prie teisių į sugeneruotą kodą. Tačiau jei AI aiškiai atkartojo atpažįstamą kieno nors kito licencijuoto kodo dalį, licencijos sąlygos vis tiek galioja. Abiem atvejais verta patikrinti kilmę.

Čia yra antrasis sluoksnis, kurį lengva supainioti su pirmuoju. Viena yra apsilankyti saugykloje ir nukopijuoti iš jos failą: tuomet viskas, kas aukščiau pasakyta apie licenciją, yra tiesioginė jūsų pareiga. Kita yra situacija, kai Claude parašo jums kodą atsakydamas į užklausą.

Įprastais atvejais AI sukuria savo tekstą, pritaikytą jūsų užduočiai, o ne nukopijuoja kieno nors kito failą. Tuomet klausimas persikelia į kitą sritį: kam priklauso sugeneruotas kodas ir ar galite jį parduoti? Tai atskira plati tema, kurią aptariau straipsnyje apie tai, kam priklauso AI parašytas kodas.

Tačiau verta turėti omenyje išimtį. Kartais AI beveik pažodžiui pateikia atpažįstamą kieno nors kito kodo dalį — visą funkciją iš žinomos bibliotekos. Tokiu atveju bibliotekos licencija vis tiek galioja, nesvarbu, kas fiziškai spaudė klavišus. Todėl didelius paruoštus blokus, kuriuos Claude įtraukė ištisus, reikia tikrinti taip, lyg būtumėte juos nukopijavę patys.

Kaip patikrinti licenciją prieš naudojant kodą: veiksmai, kuriuos reikia atlikti

Pagrindinė mintis

Procesas toks: atverkite saugyklos puslapį ir patikrinkite licencijos pavadinimą šoniniame skydelyje, atverkite patį LICENSE failą, nustatykite tipą — leidžianti (MIT, Apache, BSD) ar copyleft (GPL, AGPL) — palyginkite jį su savo situacija ir nuspręskite, ar naudoti kodą, ar ieškoti pakaitalo. Jei licencijos visai nėra, kodo nenaudokite. Visa patikra trunka porą minučių ir ją reikia atlikti prieš kodui patenkant į jūsų projektą, o ne po to.

Sutraukime viską į trumpą kontrolinį sąrašą, pagal kurį patikrinsite bet kokį trečiųjų šalių kodą prieš įtraukdami jį į projektą. Eikite nuo pirmo punkto žemyn.

  1. Saugyklos puslapyje raskite licencijos pavadinimą

    Atverkite saugyklą GitHub platformoje. Licencijos pavadinimas paprastai matomas dešiniajame stulpelyje arba po failų sąrašu — pavyzdžiui, „MIT License“, „Apache-2.0“ arba „GPL-3.0“. Jei laukelis tuščias ir licencijos failo nėra, tai jau įspėjamasis ženklas; grįžkite prie to paskutiniame žingsnyje.

  2. Atverkite patį licencijos failą

    Failų sąraše raskite LICENSE, LICENSE.md arba COPYING ir jį atverkite. Įsitikinkite, kad pavadinimas sutampa su tuo, kuris rodomas šoniniame skydelyje, ir kad licencija taikoma jūsų naudojamam kodui, o ne tik atskirai saugyklos daliai.

  3. Nustatykite tipą: leidžianti ar copyleft

    MIT, Apache 2.0 ir BSD yra leidžiančios licencijos; kodą galite naudoti uždarame komerciniame produkte. GPL ir AGPL yra copyleft; prieš nustatydami kodo pareigas patikrinkite apimamą kūrinį, platinimą ir AGPL tinklo sąlygą. Vien pavadinimas nenustato, kurie nepriklausomi komponentai apimami.

  4. Palyginkite ją su savo situacija

    Atsakykite į tris klausimus: ar parduodate produktą, ar keičiate kodą ir ar norite pirminį kodą palikti uždarą? MIT, Apache ir BSD tinka uždaram parduodamam produktui. GPL ir AGPL atveju nustatykite, kuriam apimamam ar sujungtam kūriniui reikėtų atitinkamo pirminio kodo ir kada pareiga atsiranda; įvertinkite, ar galite sąlygas įvykdyti.

  5. Jei licencijos nėra, kodo nenaudokite

    Jei licencijos failo nėra, o README nieko nesako apie leidimą, kodo naudoti negalite. Parašykite autoriui ir paprašykite leidimo arba raskite lygiavertį kodą su tinkama licencija. „Jis viešai prieinamas“ nėra leidimas.

Šis patikrinimas atrodo varginantis tol, kol jūsų produktas pirmą kartą išauga, pradeda uždirbti pinigus ir kas nors paklausia apie jame esantį trečiųjų šalių kodą. Dvi minutės pradžioje kainuoja mažiau nei ginčo sprendimas vėliau. Atskirai aptariu, ką po to daryti su produktu, kad jis nestotų po paleidimo: Sukūriau produktą su AI; kas toliau.

Dažnai užduodami klausimai

Ar galite parduoti produktą, kuriame yra kieno nors kito kodo iš GitHub?

Taip, jei kodui taikoma leidžianti licencija — MIT, Apache 2.0 arba BSD. Jos leidžia naudoti kodą komerciniame produkte, jį parduoti ir savo pirminį kodą palikti uždarą; reikalaujama tik išsaugoti licencijos tekstą ir autorystės nurodymą. GPL ir AGPL taip pat leidžia komercinį naudojimą, tačiau kodo pareigos priklauso nuo apimamo kūrinio ir platinimo ar taikomo AGPL tinklo pagrindo. Jei licencijos failo nėra, kodo naudoti negalite.

Ką reiškia, jei GitHub saugykla neturi licencijos?

Tai reiškia, kad kodo naudoti negalite. Pagal numatytąją tvarką, jei licencijos nėra, leidimo nėra; tai nereiškia, kad kodas „nemokamas“. Jis lieka visiškai saugomas autoriaus autorių teisių. Galimybė peržiūrėti saugyklą ir sukurti jos fork GitHub platformoje nesuteikia teisės naudoti kodą savo produkte. Jei jums jo reikia, parašykite autoriui ir paprašykite leidimo arba raskite lygiavertį kodą su atvirojo kodo licencija.

Kuo MIT skiriasi nuo GPL mano produkto atveju?

MIT leidžia naudoti ir keisti kodą, parduoti produktą ir savo pirminį kodą palikti uždarą — vienintelė pareiga yra išsaugoti licencijos tekstą. GPL taip pat leidžia komercinį naudojimą, tačiau apimamo sujungto ar išvestinio kūrinio perdavimas reikalauja laikytis atitinkamo pirminio kodo ir tos pačios licencijos pareigų. Vien talpinimas neperduodant kopijos yra kitas atvejis, o nepriklausomi komponentai nėra automatiškai apimami.

Ar turiu ką nors padaryti, jei naudoju MIT licencijuotą kodą?

Taip, vieną nedidelį dalyką: išsaugoti MIT licencijos tekstą ir autorystės eilutę iš kodo, kurį panaudojote savo projekte. Paprastai tai tas pats LICENSE failas, pridėtas prie originalo. MIT daugiau nieko nereikalauja — galite keisti kodą, parduoti produktą ir savo pirminį kodą palikti uždarą.

O jei kieno nors kito kodą pridėjo pats Claude, o ne aš?

Vis tiek turėtumėte patikrinti jo kilmę. AI paprastai sukuria jūsų užduočiai skirtą tekstą, todėl klausimas persikelia prie teisių į sugeneruotą kodą — tai atskira tema. Tačiau jei AI beveik pažodžiui atkartojo atpažįstamą kieno nors kito kodą iš žinomos bibliotekos, bibliotekos licencija vis tiek galioja. Didelius paruoštus blokus, įtrauktus ištisus, tikrinkite taip, kaip tikrintumėte savo kopijuotą kodą.

Atverkite Ailoot.

Išsamiau

Klausimai ir atsakymai

Ar GPL bibliotekos talpinimas verčia paskelbti visą internetinę paslaugą?

Vien talpinimas neperduodant kopijų nėra GPL platinimo pagrindas. Jei platinate apimamą sujungtą ar išvestinę programą, tam kūriniui gali būti taikomos kodo pareigos; nepriklausomi komponentai automatiškai neapimami.

Kokią papildomą sąlygą internetinei paslaugai prideda AGPLv3?

Pakeista AGPL programa, palaikanti nuotolinę tinklo sąveiką, turi siūlyti savo atitinkamą pirminį kodą tiems naudotojams. Patikrinkite apimamą programą ir integraciją, užuot manę, kad nereikia jokio kodo ar kad būtina atverti kiekvieną nepriklausomą paslaugą.

Visi straipsniai