Mag je code snippets zomaar gebruiken in je software?

Een lezer vroeg me:

Ik werk als softwareontwikkelaar bij een groot bedrijf. Nu kan ik wel steeds opnieuw het wiel gaan uitvinden, maar op allerlei sites staan snippets, kleine stukjes code die handige functies bieden die vaak precies zijn wat ik nodig heb. Mag ik die gebruiken?

Er zijn inderdaad vele vele sites die oplossingen voor concrete probleempjes of handige trucjes om iets te bereiken aanbieden. Zulke ‘snippets’ code zijn vrijwel meteen te kopieplakken in je eigen code, maar of dat juridisch mag, is niet eenvoudig te zeggen.

De eerste vraag is altijd of er auteursrecht op een snippet zit. Dat is geen automatisme. Ook kleine werken kunnen beschermd zijn, zo weten we uit het Infopaq-arrest. Elf woorden overnemen telde in die zaak als inbreuk. Wel moet de combinatie van die woorden creatief zijn, zo zal een lijstje met elf hoofdsteden niet beschermd zijn.

Bij software is het lastiger te zeggen of iets beschermd is. Software bevat namelijk altijd een stevig stuk functionaliteit, sterker nog het ís primair functionaliteit en pas secundair creativiteit. En zeker bij kleine stukjes code heb je maar bar weinig ruimte om creativiteit te uiten. Zo veel manieren om met een SQL database te connecten of een quicksort te doen zijn er simpelweg niet. Een vuistregel (uit het Amerikaans recht maar werkt bij ons ook wel denk ik) is dat als twee programmeurs dezelfde code zouden maken gegeven het probleem, de code niet beschermd is.

Als een snippet lang en creatief genoeg is, dan is deze beschermd en mag je deze niet overnemen zonder toestemming. Sommige snippetsites erkennen dit en vermelden een standaardlicentie voor alle snippets die je daar kunt vinden. Maar andere laten het aan de auteur over, en dan moet je maar hopen dat die er “Do whatever you want” bij heeft gezet, of iets dergelijks. Staat er niets bij, dan moet je het navragen bij de auteur.

Natuurlijk, je kunt je afvragen of een auteur van tien regels code jou een factuur gaat sturen als je die code overneemt. Als hij er al achterkomt natuurlijk dat die code in jouw product zit. Maar formeel heb jij het probleem als blijkt dat je code gebruikt zonder licentie.

Oh, en vergeet niet te documenteren welke licentie erbij stond toen je de snippet overnam. Als die licentie een paar jaar later verandert, dan zit jij met een bewijsprobleem – erg lastig als de nieuwe licentie ineens jouw vorm van gebruik verbiedt.

Arnoud

32 reacties

  1. Hoe documenteer ik welke licentie er gebruikt werdt op een manier die stand houd bij een rechter? En kan ik in de problemen komen als de snippet geplaatst is door bv een stagaire die helemaal niet het recht had dat te doen?

    1. Een screenshot waarvan de datum vaststaat lijkt me prima bewijs. Er zijn geen harde regels zoals “het moet een notaris zijn geweest” of “er moet een handtekening onder”.

      En ja, die problemen kun je als werkgever zeer zeker krijgen. Jij bent aansprakelijk voor je werknemers (en stagiairs), en slechts zeer zeer zelden kun je iets op hen persoonlijk verhalen. Bij een ‘gewone’ slordigheid die auteursrechtschending oplevert, is er geen mogelijkheid tot verhaal. Je moet ongeveer kunnen bewijzen dat ze dit deden met het specifieke doel om jou te beschadigen. En zoals ik altijd zeg, kwade opzet is pas aan de orde als je incompetentie hebt uitgesloten.

      1. Ik bedoelde: een stagair bij bedrijf x ‘steelt’ code en plaatst die op een forum en claimt dat het onder bsd-licentie is vrijgegeven. Ik gebruik deze code in mijn product. Bedrijf x komt hier achter en eist een schadevergoeding en/of een verbod op verder gebruik van deze gestolen code. Wat nu?

        1. Da’s een ander probleem inderdaad. De discussie komt dan neer of jij erop mocht vertrouwen dat het bedrijf(!) die BSD licentie uitgaf. Want de stagiair spreekt namens het bedrijf, in ieder geval als de code deel is van zijn/haar stageopdracht. Dat is dan op zich nog eens lastig uit te zoeken ook.

          Als de stagiair zegt “Namens XYZ BV bied ik hierbij een eerste release van openXYZ aan, onder de BSD” en dan de code online zet, dan denk ik dat het bedrijf daar wel aan hangt. Ze kunnen dan alleen proberen de stagiair aansprakelijk te stellen, maar de geldigheid van de verklaring aanvechten is moeilijk.

    2. Als comment de betreffende licentie noemen, zou voldoende moeten zijn. Zeker als je het in fatsoenlijk versie beheer hebt. Dan kan op de regel nauwkeurig gelet worden wanneer deze aangepast is.

      Als jij eenmaal ‘bewezen’ hebt dat die licentie geldt, is het daarna de beurt aan de aanklager om te bewijzen dat hij nooit de licentie heeft veranderd. Net zo moeilijk, dunkt me (en onmogelijk, gezien het wel veranderd is.)

        1. Ik heb een tijdje (betaald) onderzoek gedaan naar de herkomst en licentie van codefragmenten en mijn resultaten waren in de vorm: Gevonden op: URI Licentie: Naam

          We hadden al een directory met de meest bekende licentieteksten (GPL, BSD,…) en als we een nieuwe vonden kopieerden we de tekst en plaatsten die in een projectdirectory zodat de klant ook de tekst kon nalezen.

          Als het aan mij ligt zou ik per snipper graag zien: // gevonden op [datum] // [URL] // Auteur: [naam] // Oorspronkelijke licentie: [naam of filenaam] Het is belangrijk om een kopie van de licentievoorwaarden te bewaren.

            1. Franc, ik zie het “moet” niet. Als je kunt aantonen dat je iets consequent administreert heeft dat een bewijskracht; de tegenpartij moet dan met bewijzen komen dat jouw administratie incorrect is. Met een screenshot is je bewijs iets sterker, maar de vraag is of dat de rompslomp van maken en archiveren waard is. Met sites als “the Internet archive” kun je veelal nagaan wat er op een relevante website gestaan heeft.

  2. Het botst een beetje tussen de beperkte vocabulaire die een programmeertaal nu eenmaal heeft en het TIMTOWTDI Perl-motto. Efficiente code zal onvermijdelijk op elkaar lijken, ongeacht de programmeur. En ben je eigenlijk niet geacht de oorspronkelijke auteur op te sporen? Want er is een grote kans dat die gevonden snippet op een site ook een copypaste is.

  3. De code snippets vertellen met name hoe je iets kunt doen; je zult ze bijna nooit verbatim overnemen: er zijn bijna altijd aanpassingen nodig aan de context waarin je het gaat gebruiken, je zult de code robuust moeten maken, foutafhandeling toevoegen, je zult moeten voldoen aan lokale codeerstandaards, enzovoort. Uiteindelijk gaat het om het onderliggende algoritme of het trucje, niet om de specifieke manier waarop je het opschrijft. Uiteindelijk is de snippet waarschijnlijk zelfs voor de oorspronkelijke auteur niet meer herkenbaar, behalve dat hij misschien ziet, hé, daar is mijn idee toegepast, maar dat was nou net niet auteursrechtelijk belast…

  4. Zo veel manieren om met een SQL database te connecten of een quicksort te doen zijn er simpelweg niet.
    Ja, maar er zijn wel diverse creatieve manieren om beiden te doen. Om een verbinding met een SQL database te maken moet je een connection string hebben. Het opbouwen van zo’n string kan soms erg creatief gedaan worden. Zo kun je een aparte class in C# ontwikkelen met een aantal properties die je kunt instellen en waarbij een overload van de ToString() methode de class naar een string converteert zodat deze gebruikt kan worden om je database koppeling te maken. De class zelf kun je weer doorsturen als XML of encrypted opslaan. En daar kan best de nodige creativiteit bij komen kijken, temeer omdat de meeste ontwikkelaars ervoor kiezen om een connection string gewoon in de configuratie op te slaan.

    Ook met een QuickSort is het mogelijk om creatief te zijn. De meesten gebruiken namelijk een recursieve QuickSort routine, simpelweg omdat die het meest eenvoudig is. Ikzelf heb wel eens een QuickSort routine gemaakt die geen gebruik maakt van recursieve aanroepen en die methode vereist wel enige creativiteit maar het resultaat is dat je vaak nog een kleine performance-winst kan behalen van een paar procenten simpelweg omdat je geen gebruik maakt van recursie. (Recursieve methodes vullen namelijk de stack met extra data en iedere call naar een methode kost ook weer een paar kloktikken. Of zo’n niet-recursieve QuickSort nou veel verschil uitmaakt? Niet met kleine lijsten maar ik moest een snelle oplossing hebben om 100.000 items te sorteren. En dan merk je het verschil.

    De vraag is of andere programmeurs dezelfde code zouden schrijven, maar dat lijkt mij afhankelijk van de omstandigheden. In de voorbeelden die ik noemde zal 99.9% van alle programmeurs gewoon de standaard-methodes hanteren. Connection strings in classes opslaan was wel handig in een situatie waarbij gebruikers eerst inloggen op een LogOn database om daar de data voor deze class op te halen om zo te verbinden met de echte database, die dus per gebruiker anders ingesteld kan worden. De niet-recursieve QuickSort levert maar een kleine winst op maar is lastiger te volgen, zeker voor minder ervaren programmeurs. Je moet dan in een situatie verkeren waar die kleine winst ook daadwerkelijk de moeite loont en dat is redelijk zeldzaam.

    Maar bedenk wel dat je code snippets kunt kopieren en plakken in je eigen code, maar je kunt ze ook gewoon overtypen en daarbij namen van classes, properties en variabelen aanpassen aan je eigen stijl. Misschien wat commentaar erbij of juist weghalen en dan wordt het lastig om aan te tonen dat je een stukje code hebt gekopieerd. Je kunt dan namelijk als programmeur precies dezelfde code hebben geschreven.

    1. Artikel 16b is niet van toepassing wanneer code door een bedrijf commercieel gebruikt wordt. Maar je kunt betogen dat de auteur van de code, door plaatsing op een “snippet site” impliciet toestemming geeft voor hergebruik. Als ik kijk naar de snippet sites die wel een licentie hebben gepubliceerd is die meestal “BSD-like”: Gebruik de code zoals je wil, maar wij zijn niet aansprakelijk als er nog een bug in zit.

      (Als ik de auteurswet doorlees, is het citeren van software toegestaan onder artikel 15a of 16 AW, dus voor “bespreking” of “onderwijs” en niet voor hergebruik in een ander programma.)

      1. Sowieso kan het vervelend worden indien een snippet onder GPL is vrijgegeven omdat het overnemen van die snippet het gehele project opeens tot GPL kan doen verklaren. Lekker handig als je een commercieel product aan het maken bent. 🙂

        Daarnaast is het maar de vraag of het wijzigen van een code snippet genoeg is om onder het auteursrecht uit te komen. Wel zorgt het ervoor dat de code niet snel herkend kan worden maar als de manier van programmeren creatief genoeg is om op te vallen (of als de fouten in de snippet domweg zijn overgenomen) dan heb je gewoon een afgeleid werk geproduceerd en bij de GPL valt je werk dan ook onder de GPL. In andere gevallen schend je auteursrechten…

  5. Goh, grappig. Tijdens opdrachten binnen bedrijven kom ik geregeld een bijna volledige kopie tegen van een of ander programma, door mij of een collega daar eerder achter gelaten, waar de belangrijkste wijzigingen de aanroep van het programma en de naam van de (nieuwe?) auteur zijn 🙂 Misschien mag dat omdat deze programmacode dan binnen hetzelfde bedrijf is gebleven, anders denk ik dat auteursrecht kennelijk niet voor iedereen hetzelfde betekent….

  6. Het feit dat jij naar die code op zoek bent maakt het aannemelijk dat die code creativiteit bevat, anders zou je er niet naar hoeven te zoeken.

    Wel vind ik dat als je code op een website zet je ervan uit mag gaan dat die code gebruikt gaat worden (al dan niet verbatim) door de lezers van die site, dat is de functie van die site (eigen blog, gist, pastebin, whatever). Dat is een groot verschil met broncode uit gedownloade software halen (indien die broncode aanwezig is). Er is dus een intentie tot hergebruik bij de publicatie op een website. Onder welke voorwaarden is onbekend, en daar zul je dus wel achteraan moeten (meestal is een comment op de blog genoeg). Maar het lijkt me onwaarschijnlijk dat iemand doelbewust code open en bloot publiceert en je vervolgens gaat aanklagen omdat je die code gebruikt. En ik neem aan dat rechters daar ook rekening mee houden (totaal ongefundeerde aanname, dat wel).

    1. Wel vind ik dat als je code op een website zet je ervan uit mag gaan dat die code gebruikt gaat worden (al dan niet verbatim) door de lezers van die site, dat is de functie van die site (eigen blog, gist, pastebin, whatever). Dat is een groot verschil met broncode uit gedownloade software halen (indien die broncode aanwezig is). Er is dus een intentie tot hergebruik bij de publicatie op een website.
      Vervang ‘code’ door ‘foto’ en lees de Getty blogpost nog een keer door 🙂

      1. Ik snap wat je probeert te zeggen, maar een foto is niet hetzelfde als een stuk code. Als ik blog over hoe je een fietswiel vervangt, met foto’s, dan mag de inhoud van die foto’s gebruikt worden als handleiding hoe dat te doen. Ook door een fietsenmaker die gerepareerde fietsen ‘publiceert’. Je kopieert immers niet. Je mag de foto alleen niet gebruiken in je eigen schriftelijke publicaties. Hetzelfde geldt voor de code, die je mag overnemen als handleiding hoe iets te doen. Ik vind dat er ook nog een verschil is (maar dat is mijn mening) tussen gebruik van die code in je eigen (al dan niet commerciële) software, en het schrijven van een boek of blog of andere publicatie met mijn snippet er in. Voor mijn gevoel zit de crux hem in het verschil tussen de code als content van een door mensen leesbaar artikel en de code als bron voor een compiler. De compiler kun je gelijkstellen aan de fietsenmaker die naar de foto kijkt hoe het ook al weer moet.

        PS. Een dergelijke discussie als dit was er laatst ook op Slashdot over Github, waar de licentie vaak ontbreekt van de gepubliceerde projecten.

      2. Voor mij is een verschil tussen een foto en een stuk code dat het stuk code meestal bedoeld is ter overname. Een foto versiert over het algemeen. Neem dat plaatje met “20 goto 10” hierboven, is dat werkelijk bedoeld als inhoudelijk deel van mijn betoog? Ik denk het niet. Daarom kun je moeilijk zeggen dat ik bedoeld had dat je dat mocht overnemen.

        Bij een snippet op een “hoe moet het”-site lijkt me de interpretatie wel verdedigbaar dat het bedoeld was voor hergebruik. Waarom zeg je “zo moet het” als je niet wil dat mensen het zo gaan doen?

    2. “Het feit dat jij naar die code op zoek bent maakt het aannemelijk dat die code creativiteit bevat, anders zou je er niet naar hoeven te zoeken.”

      Is dat zo? Heel veel voorbeelden op het internet zijn bedoeld als instructie hoe je iets implementeerd. Eerder is al Quicksort voorbij gekomen. Daarbij werd het argument gemaakt dat Quicksort wel creatief kon zijn als je het zonder recursie wil implementeren.

      Echter, non recursive quicksort is gewoon een bekend algorithme en daarvan zijn veel implementaties in zo’n beetje alle talen op het internet te vinden. En op zaken als variabele naam en syntax zoals afgedwongen door de programmeertaal na, zijn die allemaal gelijk.

      Implementeren van quicksort op welke manier dan ook is niet creatief, maar een snippet gebruiken spaart je wel tijd in schrijven en debuggen.

  7. “Beter goed gejat dan slecht bedacht” zei mijn stage-begeleider van de HTS vroeger. Nou weet ik wel dat de tijden inmiddels veranderd zijn, maar in de meeste best-practises documenten staat “Hergebruik” of “code-recycling” zoals het tegenwoordig genoemd wordt, hoog in het vaandel.

    Een manier om dat te doen, is via het gebruik van snippets. Die zijn vaak door veel mensen gebruikt, en hergebruikt, en aangepast en daardoor misschien toch wel veel robuuster dan wat de gemiddelde junior in het gemiddelde IT-bedrijf aan code kan bakken. Jammer dat auteursrecht hier in de weg kan zitten.

    Verder zie ook ik het creativiteitselement niet van software schrijven, maar daar is hierboven al uitvoerig over gesproken.

    1. Het feit dat jij naar die code op zoek bent maakt het aannemelijk dat die code creativiteit bevat, anders zou je er niet naar hoeven te zoeken.

      Op zich zie ik wel wat er creatief is aan software en auteursrecht lijkt mij op zijn plaats. In tegenstelling tot de eigenaar van dit blog, zie ik juist niet wat software octooieerbaar (is dat een wooord?) zou maken. Uiteindelijk zijn het allemaal algorithmes en is het allemaal wiskunde. Die algorithmes combineer je op een creatieve manier om een programma te maken. Dat betekent niet dat standaard algorithmes waarop je je baseert bij het maken/combineren op zich creatief zouden zijn. En laten code snippets nu juist vaak die basis algorithmes implementeren.

      1. Volgens mij mag je hem gewoon Arnoud noemen hoor 🙂 (IANA (I Am Not Arnoud))

        Het blootleggen van een wiskundig algoritme is net zo goed creatie als het uit een rots hakken van een beeldhouwwerk. Beiden waren al aanwezig, maar gewoon nog niet ‘ontdekt’. Mij zul je dus niet horen zeggen dat broncode niet auteursrechtelijk beschermd kan worden. Patenteerbaarheid (klinkt gewoon fijner dan ‘octrooieerbaarheid’) is iets heel anders en bij software veel te breed en daardoor innovatiebeperkend.

        Het gaat mij er in dit geval om dat de intentie van het publiceren op een website over hoe je iets moet doen een impliciete intentieverklaring is dat voor hergebruikt spreekt.

      1. Wordt er juridisch nog onderscheid gemaakt tussen bron code en het executeerbare computerprogramma? Een stukje code of pseudocode in een artikel lijkt me nog geeen computerprogramma zoals in het artikel?

        1. Pseudocode mag je sowieso gebruiken omdat je dat niet letterlijk kan copypasten. Tenzij je natuurlijk een pseudocodecompiler gebruikt 😉 Als je een download van een executable of een zipje toevoegd aan je artikel lijkt me het wel heel duidelijk de intentie dat je die mag downloaden en gebruiken. Onder welke voorwaarden is echter de vraag, en dat zul je dus moeten vragen aan de auteur (of op een andere manier vaststellen).

          1. Ook niet-letterlijk overnemen is auteursrechtinbreuk, als je creatieve beschermde elementen overneemt. Als je mijn blog kopieert en elk woord vervangt door synoniemen, dan is dat ook inbreuk (hoewel toegestaan onder mijn licentie, toevallig).

            Wel zit er ergens een grens, als je alleen het achterliggende idee overneemt dan is dat auteursrechtelijk prima. Maar waar die grens ligt, is niet 1-2-3 te zeggen. Ik vind healleen geen automatisme om te zeggen “pseudocode, dus mag”.

            1. Wel zit er ergens een grens, als je alleen het achterliggende idee overneemt dan is dat auteursrechtelijk prima
              Maar de bedoeling van pseudocode is het overbrengen van het achterliggende idee: “In computer science and numerical computation, pseudocode is an informal high-level description of the operating principle of a computer program or other algorithm” (wikipedia, mijn nadruk). Maar hoe pseudo de geplubliceerde pseudocode is, is natuurlijk per geval verschillend. Al zou ik een volledig gesynonimiseerde versie van een van jouw artikelen geen pseudo-artikel noemen. Een samenvattig zou een betere analogie zijn. Hoe zit het met samenvattingen van boeken en artikelen, is dat auteursrechten schendend over het algemeen?

Geef een reactie

Handige HTML: <a href=""> voor hyperlinks, <blockquote> om te citeren, <UL>/<OL> voor lijsten, en <em> en <strong> voor italics en vet.