Hopp til innhold

Reviderte 644 Rust‑crates for lisenskompatibilitet ved hvert bygg, og beviste at kontrollen slår ut ved å skrive om lisensen til én crate og ved å flytte den låste kjernerevisjonen uten å regenerere.

644 Rust‑crates lisenskontrollert ved hvert bygg

Situasjon. Å lenke en Rust‑kjerne inn i en levert app betyr å levere alt den kjernen er avhengig av. Avhengighetsgrafen består av 644 crates. Hver av dem har en lisens, noen har mer enn én, og én enkelt copyleft‑crate som kommer inn tre nivåer ned gjennom en rutinemessig versjonsoppgradering, endrer hvilke vilkår appen som helhet kan distribueres under — i det stille, i en låsefil ingen leser linje for linje.

Oppgave. Lisenssituasjonen måtte verifiseres ved hver bygging i stedet for å gjennomgås én gang, med en eksplisitt tillatelsesliste, slik at en endring i grafen gir en byggefeil og ikke er en oppdagelse noen andre gjør senere.

Handling. Lisenskontrollen løser opp hele den transitive grafen og sjekker lisensuttrykket til hver crate mot en liste over vilkår prosjektet godtar, og evaluerer de boolske uttrykkene riktig — en crate som tilbyr et valg mellom to lisenser, er akseptabel hvis én av dem står på listen, og en crate som krever begge, er bare akseptabel hvis begge gjør det. Alt som ikke har treff, får byggingen til å feile i stedet for å gi en advarsel, og å legge til et vilkår på tillatelseslisten er en bevisst endring med en begrunnelse. En sjekk som aldri har feilet, kan ikke skilles fra en som ikke kan feile, så den ble provosert til å feile med vilje, to ganger. Én gang ved å skrive om lisensuttrykket til en crate til noe listen ikke godtar, som er formen på en crate som endrer vilkårene sine oppstrøms mellom versjoner — tilfellet ingen menneskelig gjennomgang fanger, fordi selve craten ikke er ny. Én gang ved å flytte den låste kjernerevisjonen uten å generere lisenskontrollen på nytt, som er formen på en kjerneoppgradering som i det stille tar med seg en ny avhengighet. Begge provokasjonene fikk byggingen til å feile slik det var meningen, og sjekken ble stående uendret i stedet for å bli utvidet.

Resultat. Lisensgrunnlaget for distribusjonen sjekkes ved hver bygging, og det er kjent at sjekken virker fordi den ble provosert til å feile, ikke fordi den aldri har sagt fra. Før den fantes, fremsatte app‑pakken, lisensfilen og prosjektets egen README alle en påstand om 644 crates som ingenting hadde verifisert. Begrensningen er presis og bør ikke overdrives: sjekken leser de deklarerte lisensmetadataene, og metadata kan være feil eller ufullstendige. Den beviser ingenting om en crate som deklarerer lisensen sin feil, og den er ikke juridisk rådgivning.

Ta en titt på hele porteføljen.

Overfor kunder kaller vi denne Kjenn lisensen til alt du leverer — se den sammen med de andre sakene.

Ett stykke av en lengre oversikt — og den ligger i sin helhet her.

Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.

Se hele oversikten