Wat mag ik met snippets van Stack Overflow?

| AE 11706 | Intellectuele rechten | 17 reacties

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

Deel dit artikel

    • 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?

      • 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?

        • 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.

          • 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. 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.

    • 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’…

    • 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).

  2. 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?

Laat een reactie achter

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

(verplicht)

Volg de reacties per RSS