Wat mag ik met snippets van Stack Overflow?

Een lezer vroeg me:

Zoals vele ontwikkelaars neus ik vaak op Stack Overflow naar oplossingen voor mijn programmeerproblemen. Ik zie dan vaak broncode die de oplossing implementeert, maar ik weet dat ik die niet zomaar mag copypasten in verband met licentieproblemen. Maar wat mag ik dan wel?

Stackoverflow is de bekendste site voor programmeurs om met elkaar tips, ideeën en oplossingen te delen. Meestal gebeurt dat in de vorm van programmeercode (broncode) omdat dat nu eenmaal de meest exacte en directe manier is om aan te geven hoe je in software een bepaald probleem aanpakt. Die oplossingen zijn vaak relatief kort en worden dan ook wel snippets genoemd.

Op software rust auteursrecht. Je mag dus iemands software niet overnemen, ook niet als hij de broncode publiceert of die broncode ergens neerzet waar het de bedoeling is om erover te praten en er naar te kijken. Alleen als er een licentie bij staat, kun je de software gebruiken – binnen de grenzen van de licentie. Helaas zetten maar weinig SO gebruikers expliciet een licentie bij hun snippets.

Bij snippets kun je dan weer wel je afvragen óf er auteursrecht op rust. Er moet wel iets van creativiteit in het werk zitten. Dat kan bij een kort werk, maar zeker bij software is dat geen automatisme. Een snippet die laat zien hoe een API aangeroepen moet worden, zou ik niet creatief noemen. Dat is alleen “kijk hier moet de sessiesleutel, hier zet je parameters zoals kleur en gewicht en dan krijg je een array terug met de actuele voorraad”. Zo’n snippet heeft geen auteursrecht en daarmee mag je natuurlijk doen wat je wil.

Helaas is zodra je boven dergelijke trivialiteiten gaat het al snel onduidelijk. Er zijn geen juridische vuistregels zoals dat tot tien regels code vrij van rechten zijn. Zo werkt auteursrecht gewoon niet. Je moet dan inhoudelijk je afvragen of dit iets creatiefs is of ‘gewoon’ zoals je het zou doen. Dertig regels code met hoe een quicksort werkt zou ik niet creatief noemen (dat is nu eenmaal grofweg een standaard algoritme) maar 5 regels om snel een matrix te scannen is vaak juist héél creatief.

Wat natuurlijk wel altijd mag, is het idéé dat men je communiceert met zo’n snippet overnemen en in eigen code verwerken. Ideeën, principes en algoritmes vallen buiten het auteursrecht en mogen dus vrij worden gebruikt. Dat doe je dan dus door eerst in eigen woorden (of pseudocode) op te schrijven wat er onder die geposte broncode zit, en daarna dat in echte code uit te werken in je eigen applicatie.

Arnoud

17 reacties

    1. Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

      Dus je moet de originele licentie bijvoegen, kan waarschijnlijk ook met een linkje naar de CC BY-SA 4.0 als het bijvoorbeeld alleen een functie in je code betreft. Das simpel.

      Alleen die laatste twee, als jij je code compiled naar closed source moet je dan de CC BY-SA 4.0 stukjes er nog los bij doen zodat men die weer kan delen?

      1. Dit creëert inderdaad meer problemen dan oplossingen. Als alle code op StackOverflow onder CC BY-SA valt, dan betekend het dat je alleen auteursrechtelijke snippets kunt gebruiken mits jij jouw applicatie ook onder die zelfde licentie uit brengt.

      2. De tekst op de licensing pagina gelinkt door @Dorus eindigt met:

        Proper attribution is required if you republish any Stack Exchange content.
        Daarbij wordt gelinkt naar https://stackoverflow.blog/2009/06/25/attribution-required/

        Volgens mij snapt StackOverflow zelf niet dat ze misschien Share Alike niet mee hadden willen nemen. Ze willen vooral zelf gelinkt worden.

        CC BY-SA 4.0 is trouwens one-way compatible met GPLv3. En onder GPLv3 vervalt de Share Alike. Je hebt alleen een tussenlaag nodig waarin de CC BY-SA 4.0 code samengevoegd wordt met GPLv3 code.

        Dat vind ik eigenlijk neerkomen op administratieve rompslomp. Wat maakt het dan eigenlijk uit dat ik bij gebruik van het originele (CC BY-SA 4.0) niet aan Share Alike doe, als ik met één tussen laagje, een library onder GPLv3 die meerdere snippets combineert, die code wel in mijn closed source project mag gebruiken zonder Share Alike te hoeven doen?

        1. Ik heb hier nog even verder naar gekeken.

          Volgens Deze opmerking op StackOverflow (met verwijzing naar een sectie in de CC BY-SA 4.0 licentie) is ‘share alike’ is alleen nodig als je de code ook daadwerkelijk herpubliceert. Dat is op zich vergelijkbaar met GPLv3. Dat mag je ook in je closed source project gebruiken (als je het als library gebruikt is het al helemaal geen probleem -afaik-). Maar ALS je de source van het project deelt (wat niet verplicht is), dan is het een derivative work en moet je het als geheel de ‘share alike’ licentie volgen.

          Volgens mij kun je de snippets van Stack Overlflow dus ook zonder problemen in een closed source project gebruiken. Gebruik je het in een open source toepassing, dan moet je dus een compatibel licentie gebruiken. En eventuele aanpassingen moeten goed bijgehouden worden.

          1. Ik denk dat je dat verkeerd gelezen hebt: “You can include CC-BY-SA source code in proprietary software iff you do not publish that software.” Dit geldt dus niet alleen voor het publiceren van de code maar ook voor het publiceren van de software (de gecompileerde code). De software is immers een afgeleide van de broncode.

            Gebruik je de code voor projecten die niet gepubliceerd worden, voor eigen gebruik of binnen het bedrijf zelf, dan is er ook geen probleem. Als softwarebouwer voor derde partijen heb je hier eigenlijk wel rekening mee te houden. Al ben ik het met je eens dat ze misschien de Share Alike niet eens bedoeld hadden.

            1. @Matthijs Goed punt. Ik schreef bovenstaande met mijn webdeveloper bril op. Hier blijft de code van en in ons beheer. We publiceren/delen de code dus nooit. Nou ja, zolang het om server-side code gaat natuurlijk. Javascript code wordt (minified of niet) wel ‘gepubliceerd’. Maar of dat nou als distribution moet gelden…

  1. Eigenlijk moet je dan in eigen ideeen/pseudocode opschrijven wat het doet, en dan iemand anders die de originele code nooit heeft gezien, van die pseudocode weer een programma laten schrijven toch? Of is dat ondertussen achterhaald 😛

  2. Los van licenties, is het gebruik van stackoverflow als “copy-paste” bron van oplossingen niet aan te raden. Veel van de antwoorden op stackoverflow zijn verouderd, inefficient, of gewoon fout — het is handig om snel een aantal leads te vinden, maar kijk altijd wat verder dan je neus lang is, neem de discussie even door, en bestudeer alternatieven. Als je dat gedaan hebt, kun je het onderliggende idee snel genoeg zelf implementeren, en loop je een stuk minder risico dan als je zo maar gaat copy-pasten.

    1. Veel van de antwoorden op stackoverflow zijn ook zo geschreven dat ze het idee overbrengen, maar (vaak opzettelijk) zodanig dat het een slecht idee is om ze zo te copy-pasten (e.g. zonder foutafhandeling). Juist om mensen te ontmoedigen zomaar te copy-pasten. Wat veel pseudo-coders er niet van weerhoudt ze alsnog te copy-pasten. Ik ben in mijn bedrijf ook meermaals totale baggercode tegengekomen die een directe kopie was van het google-resultaat op ‘hoe die ik XYZ’…

    1. Als je post op Stackoverflow is er geen expliciete overdracht van auteursrecht. Afhankelijk van het toepasselijk recht betekend dat dat het eigendom nog steeds bij jou (of je werkgever) ligt. Dat betekent dat je ook achteraf (wellicht tegen betaling van “schadevergoeding”) toestemming kan geven onder elke licentie die je wilt. Het is perfect mogelijk om een werk onder vele licenties uit te geven en ook om het auteursrecht niet af te dwingen (een van de redenen voor exclusieve licenties).

  3. Dus voor de goed orde, het antwoord op de vraag die Arnoud probeert te beantwoorden is dus: “Ja, je mag de snippets kopieren en gebruiken in je eigen code, zolang je de regels van de license (attribution!) maar volgt.”

    De opmerking van Arnoud: “Alleen als er een licentie bij staat, kun je de software gebruiken – binnen de grenzen van de licentie. Helaas zetten maar weinig SO gebruikers expliciet een licentie bij hun snippets.” is dus niet relevant. Auteursrecht blijft bij de gebruiker, maar valt impliciete onder de CC BY-SA 3.0 licentie.

    Correct?

  4. Volgens mij is het tamelijk duidelijk wat je met snippets op SO mag (CC BY-SA 3.0, zie bovenstaande antwoorden). Wat ik me wel eens afvraag is of ik als developer in dienst van een bedrijf wat eigenlijk eigenaar is van het copyright op alles wat ik aan code schrijf wel snippets op SO mág posten.

      1. Uiteraard, maar ik vermoed dat dit in de praktijk bijna nooit gebeurd. Zolang ik niet aan een NDA gebonden ben en ik schrijf iets wat gevoelsmatig niet echt als ‘geheim’ aanvoelt, dan ga ik er meestal (onterecht) vanuit dat het wel snor zit. Meestal is dat dan ook niet als creatief te beschouwen, en valt dus überhaupt buiten het auteursrecht, maar echt goede vragen (dus niet uit gebrek aan feitenkennis) vereisen toch wel eens een creatieve oplossing.

        Daarnaast doelde ik eigenlijk niet zozeer op code die uit een project komt waar ik aan werk, maar meer op het idee dat alles wat ik schrijf eigendom is van het bedrijf waar ik voor werk.

        Het antwoord is hetzelfde: daar moet je afspraken over maken…

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.