# Kend licensen på alt, hvad I sender ud

Har kontrolleret 644 Rust‑crates for licenskompatibilitet ved hvert build og bevist, at tjekket slår til, ved at ændre licensen på én crate og ved at flytte den fastlåste kernerevision uden at regenerere.

september 2026

**Situation.** At linke en Rust‑kerne ind i et program, der skal leveres, betyder at levere alt, hvad den kerne afhænger af. Afhængighedsgrafen er 644 crates. Hver af dem har en licens, nogle har mere end én, og en enkelt copyleft‑crate, der dukker op tre niveauer nede via en rutinemæssig versionsopdatering, ændrer, hvilke vilkår programmet som helhed må distribueres under — i stilhed, i en låsefil, som ingen læser linje for linje.

**Opgave.** Licensstatus skulle verificeres ved hvert build i stedet for at blive gennemgået én gang, med en eksplicit tilladelsesliste, så en ændring i grafen giver en buildfejl og ikke bliver en opdagelse, som en anden gør senere.

**Handling.** Gennemgangen udleder hele den transitive graf og tjekker hver crates licensudtryk mod en liste over vilkår, projektet accepterer, og evaluerer de booleske udtryk korrekt — en crate, der tilbyder et valg mellem to licenser, er acceptabel, hvis en af dem står på listen, og en crate, der kræver begge, er kun acceptabel, hvis begge står på listen. Alt uden match får buildet til at fejle i stedet for at give en advarsel, og at føje et vilkår til tilladelseslisten er en bevidst redigering med en begrundelse. Et tjek, der aldrig har fejlet, kan ikke skelnes fra et, der ikke kan fejle, så det blev bevidst provokeret til at fejle, to gange. Én gang ved at omskrive en crates licensudtryk til noget, listen ikke accepterer, hvilket svarer til en crate, der ændrer sine vilkår upstream mellem versioner — det tilfælde, som ingen menneskelig gennemgang fanger, fordi selve craten ikke er ny. Én gang ved at flytte den fastlåste kernerevision uden at generere gennemgangen igen, hvilket svarer til en kerneopdatering, der i stilhed trækker en ny afhængighed med sig. Begge provokationer fik buildet til at fejle som tilsigtet, og tjekket blev beholdt, som det var, i stedet for at blive gjort bredere.

**Resultat.** Distributionsstatus tjekkes ved hvert build, og man ved, at tjekket virker, fordi det blev provokeret til at fejle, og ikke fordi det aldrig har sagt noget. Før det fandtes, fremsatte pakken, licensfilen og projektets eget README alle en påstand om 644 crates, som intet havde verificeret. Begrænsningen er præcis og bør ikke overdrives: tjekket læser de erklærede licensmetadata, og metadata kan være forkerte eller ufuldstændige. Det beviser intet om en crate, der angiver sin licens forkert, og det er ikke juridisk rådgivning.

---

- Rolle: Build- og release‑ingeniør
- Kategorier: [Data governance](https://engineer.company/da/categories/data-governance/), [DevOps](https://engineer.company/da/categories/devops/), [Automatisering & CI/CD](https://engineer.company/da/categories/automation/), [Sikkerhed](https://engineer.company/da/categories/security/), [Dokumentation](https://engineer.company/da/categories/documentation/)
- Ydelser: [Data governance & datakvalitet](https://engineer.company/da/services/data-governance/), [DevOps & CI/CD‑automatisering](https://engineer.company/da/services/devops-cicd/), [Sikkerhed & adgangsstyring](https://engineer.company/da/services/security-access/)

<https://engineer.company/da/portfolio/know-the-licence-of-everything-you-ship/>
