Disclaimer: Sunt dezvoltator, nu avocat; aceste informații sunt considerate corecte, dar nu reprezintă consultanță juridică; dacă credeți că ceva este incorect, vă rog, scrieți un comentariu și vom rezolva împreună🔧
Până acum nu eram preocupat de licența pachetului npm. Puteam verifica licența dependenței imediate, dar niciodată nu am verificat dependențele de la terțe părți (de tranziție).
🚓 Și apoi am întâlnit băieți din departamentul juridic 🚓
Acum cred că dezvoltatorii ar trebui să aibă o înțelegere de bază a licențelor software pentru a avea un dialog constructiv cu echipele juridice din companiile lor. Această postare adună cunoștințe generale despre licențele Open-Source și cum se aplică la dependențele npm și la dezvoltarea Full-Stack JavaScript în general.
Să ne dăm seama când ar trebui să începeți să vă faceți griji în legătură cu licențele.
Când se declanșează cerințele de licență?
Dacă efectuați legarea cu biblioteci open source și apoi distribuiți software-ul rezultat, atunci software-ul dvs. trebuie să fie conform cu cerințele bibliotecilor legate.
Să privim mai îndeaproape legarea și distribuția aplicate aplicațiilor JavaScript.
Legăturarea
Utilizarea bibliotecilor de la terți înseamnă în mod normal legarea acestora:
- Dacă vă grupați (de exemplu, cu webpack) codul cu pachete open source, aceasta se consideră legare statică
- Dacă utilizați pachete open source în aplicația dvs. Node.JS (de ex. prin require) sau îl conectați la o pagină web prin intermediul unei etichete de script, este vorba de o legătură dinamică
Nota: atunci când construiți un pachet sau executați o aplicație Node.JS, efectuați același tip de legătură atât cu dependențele imediate (listate în package.json al dvs.), cât și cu cele tranzitive (listate în package.json al părților terțe). Licențele de dependență imediată și tranzitivă au același efect asupra software-ului dvs.
Aceasta nu era intuitiv pentru mine înainte 🤔
Distribuție
Simpla utilizare a bibliotecilor open source nu declanșează în mod necesar cerințe de licență. În mod normal, cerințele de licență sunt declanșate atunci când distribuiți software:
- Transferul de software între angajații aceleiași companii nu este o distribuție
- Când utilizatorii interacționează cu Node.JS app over network, nu este o distribuție pentru majoritatea licențelor open source; dar este o distribuție pentru licențele Network Protective cum ar fi AGPL
- Punerea fișierelor JavaScript pe un server web public este o distribuție
Ce licență este ok
Majoritatea licențelor open source se încadrează, în general, într-unul din aceste tipuri:
- Licențe de domeniu public și licențele permisive, cum ar fi MIT, care vă permit să faceți orice, în afară de a da în judecată autorul
- Licențele copyleft sau de protecție, cum ar fi GPL, împiedică crearea de legături (a se vedea mai sus) cu software-ul proprietar; cazul limită este reprezentat de licențele de protecție a rețelei, cum ar fi Affero GPLv3, care se declanșează prin interacțiunea în rețea;
- Între cele două de mai sus se află licențele slab protectoare, cum ar fi MPL, care au mai puține restricții pentru legarea dinamică (până când biblioteca se află în propriul fișier)
Să verificăm scenariile comune pentru un dezvoltator JavaScript:
Realizați o aplicație web
Cel mai probabil vă grupați toate fișierele, inclusiv bibliotecile într-un singur fișier JS și îl puneți pe un server web. Efectuați legarea și distribuția statică. Este bine să folosiți pachete cu licențe Permissive într-un pachet.
Dacă trebuie să folosiți un pachet cu licență Weakly Protective, cum ar fi MPL, aveți opțiunile:
- Încărcați biblioteca dintr-un fișier separat (de ex. prin intermediul tag-ului script)
- Aplicați o licență open source compatibilă pachetului dvs. (dar verificați comentariul de mai jos și discutați cu echipa dvs. juridică înainte)
Dacă pachetul dvs. nu are ✨proprietate intelectuală valoroasă✨, atunci a doua variantă ar trebui să fie bună. Nu cred că concurenții vor beneficia de pe urma codului dvs. ofuscat. Dar dacă pachetul conține o proprietate intelectuală valoroasă, atunci aplicarea licenței open source acordă o utilizare gratuită a acesteia.
Realizați o aplicațieNode.JS
În acest caz, în mod normal, conectați bibliotecile prin intermediul unui apel require(). Este o legătură dinamică. Este în regulă să folosiți licențe Permissive și chiar Weakly Protective. Doar asigurați-vă că pachetele rămân în propriile lor fișiere cu licențele respective.
Dacă oferiți doar SaaS și nu distribuiți în niciun alt mod, puteți folosi chiar și pachete cu licență Protective. Pentru multe licențe Protective, interacțiunea în rețea nu este o distribuție. Excepție fac licențele Network Protective, cum ar fi Affero GPLv3
Realizați un pachet NPM cu sursă deschisă
În mod normal, conectați dependențele părților terțe prin intermediul unui package.json. După cunoștințele mele, listarea dependențelor în package.json nu poate fi considerată ca fiind o legătură. Legătura va fi realizată de un dezvoltator de aplicații care va utiliza pachetul dvs. într-o etapă de construire sau de execuție.
Dacă nu doriți să derutați utilizatorii pachetului, asigurați-vă că toate dependențele (atât cele imediate, cât și cele tranzitive) au licențe compatibile cu licența pachetului dvs.
În mod normal, licențele dependențelor ar trebui să fie mai permisive sau să aibă același nivel de permisivitate ca și licența pachetului dumneavoastră.
De exemplu, dacă pachetul dumneavoastră are licența Apache 2.0 puteți folosi dependențe cu licență MIT și BSD. Dar nu ar trebui să utilizați dependențe cu licență MPL1.1 sau LGPLv3, deoarece acestea au un copyleft mai puternic.
Lasă un răspuns