Jesper Lund Stocholm bloghoved

LGPL - hvor meget må jeg stjæle?

Som I sikkert ved, er OpenOffice.org et eksempel på et stykke software, hvor kildekoden er åben og fri (også som i 'øl') - konkret via dens licens som er LGPL.

Som I sikkert også ved, har den "dokumentformat-centriske" del af blogsfæren været på kogepunktet i den sidste uges tid pga Microsofts implementering af "formler" i ODF 1.1. og Rob Weirs test af interoperabilitet af denne med andre eksisterende ODF-implementeringer.

Ankepunktet er, at Microsoft skulle have implementeret "formler" i regneark med ODF som man har gjort det i OpenOffice.org og ikke have brugt formel-definitionen fra OOXML.

Anyways: det fik mig til at tænke på - hvor meget må man hugge fra noget LGPL-software, modificere og distribuere den før man skal frigive sin egen applikation som LGPL?

"Interoperabilitet" er jo "det de unge vil have" i dag, så man kunne sikkert tjene en god slant penge på at kunne lave interoperabilitetstests. Samtidig kunne det jo være, at man ikke ønskede at frigive sin egen kode som OSS.

Så kan I hjælpe mig med - hvor går grænsen? I tilfældet med formler i ODF er OOo's måde (inden OpenFormula) ikke dokumenteret andre steder i kildekoden og den er jo dækket af LGPL.

Kan jeg bare gå i gang med saksen?

Kommentarer (28)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Jakob Bruun Hansen

Ville svare som Jon, men han kom først :)

Hvor meget af en bog må du udgive, før du skal have tilladelse fra ophavsretsindehaveren?

Ikke særlig meget gætter jeg på.

Hvis du ønsker at udgive kode som lukket software, bør du vil holde dig helt fra at tage kode med, hvor forfatteren netop beder dig om, ikke at bruge den til det?

Men (L)GPL giver dig lov til at kigge alt det du vil. Bare du skriver din egen proprietærer kode.

  • 0
  • 0
Mads Olesen

Her er den super-korte, ret naive, version (fortolket af mig, ud fra http://www.gnu.org/licenses/lgpl.html ):
* Hvis du udelukkende linker mod noget LGPL-software, må din software gerne være proprietær
* Hvis du laver ændringer i noget LGPL-software, skal disse ændringer videregives under LGPL

Det kommer derfor an på din definition af "hugge".
* Copy-paste: nej.
* Linke: ja.

  • 0
  • 0
Henrik Jensen

Bare lige en løs og fuldstændig ugennemprøvet tanke.

Men hvad hvis man i stedet for at stjæle koden i stedet laver en fork (det må man vel godt) og så sletter alt det kode man ikke skal bruge + tilretter så den brugbare kode virker som et library (det må man vel også godt, der er vel ingen begræsninger i hvilke typer ændringer man må lave?)

Nu har du så et "OOo Formula Library" som du så publicerer under LGPL for at overholde betingelserne fra LGPL licensen fra OOo.

Dernæst udvikler du så din lukkede proprietære software som blot linker til dette library, hvilket er tilladt i forhold til LGPL licensen.

Skummelt ja, men er der noget der bremser denne fremgangsmåde?

  • 0
  • 0
Henrik Madsen

Rob Weirs test og hans bemærkninger er virkelig interessant læsning, og det viser, synes jeg, at Microsoft reelt ikke ønsker interoperabilitet. Havde Microsoft valgt at 'sjæle' fra OpenOffice ville det jo ikke være første gang at de 'lånte' kildekode fra andre.Og de kunne jo have taget det op ifm ODF standardiseringen - hvis de ellers gad deltage konstruktivt i dette vigtige arbejde.

Gennem tiden har MS dog oftest haft den taktik at 'stjæle' og derefter lavet uforståelige og udokumenterede tilføjelser (...med det formål at hindre interoperabilitet). Dette er dokumenteret flere gange startende med MS-DOS contra IBM-DOS og eksempelvis det langt bedre DR-DOS. Andre velkendte eksempler er MS Exchange og Kerberos - se eksempelvis

http://www.usenix.org/publications/login/1997-11/embraces.html

... og jeg kunne blive ved.

Denne gang ville det have været fremmende for interoperabilitet om MS havde taget noget fra OpenOffice, Det er vel derfor, at Microsoft-vennerne (t.ex. Jesper L.S.) søger at legitimere MS' bidrag til et kæmpe tilbageskridt mht. til interoperabilitet, ved at stille et sådant spørgsmål, eller ....?

  • 0
  • 0
Henrik Jensen

@Henrik: Det er så vidt jeg kan se helt ok; hvad er det skumle i det? Det er jo netop det der er meningen med LGPL i modsætning til GPL.

Det virker bare til at være en omgåelse af netop det som du svarede "intet" til tidligere.

Når Jesper spørger:

Anyways: det fik mig til at tænke på - hvor meget må man hugge fra noget LGPL-software, modificere og distribuere den før man skal frigive sin egen applikation som LGPL?

Så er svaret vel ikke 'intet' men at alt det som han hugger det skal blot puttes ind i et library som han så publicerer under LGPL og så kan du fra egen applikation blot linke til dette library?
(Måske over en fork -> Fjerne/Tilrette kode, men resultatet er det samme)

  • 0
  • 0
Lars Bengtsson

Nå, så Jesper Lund Stocholm vil gerne stjæle? På lovlig vis? Er det det vi andre kalder legitimeret svindel? Nej, godt ord igen.

Er blog-indlæget et kunstværk? Med kategorien "Dokumentfalsk" skrives et blog-indlæg som stiller et spørgsmål, hvor der er så meget plads til fortolkning, så jeg vil kalde det for upræcist. Det medfører så at man kan give flere forskellige "korrekte" svar, eller påstå at andres svar er forkerte.

En fortolkning af spørgsmålet kan medføre konklusionen: aldrig. Fordi der står jo ikke i spørgsmålet at det antages at ens egen applikation skal have nogen relation til LGPL software.

Er det for at demonstrere at vi (de fleste) har skyklapper på når vi læser, og hurtigt indtolker vores egen betydning (fordom) i det skrevne? Eller er det for at give plads til (konfliktfyldt) debat at udtrykke noget uklart og derved give plads til forskellige paradigmer. En præcis formulering vil netop kunne forhindre tvetydigheder som netop muliggør konflikter i debatten (som måske ikke er der).

Men for at holde sig til debattens substans så synes jeg da det er interessant at LGPL (sandsynligvis) muliggør sådan en ændring at man selektivt kan udvælge en interessant del af biblioteket (programmet) og kombinere det med et lukket program.

Håber at Jesper er glad for at have stjålet andre ting, så som reglerne for dansk og matematiske regneregler. Med andre ord er viden noget der skal behæftes med ejendomsret eller er det noget som skal deles?

  • 0
  • 0
Claus Agerskov

En vinkel, som ikke er kommet frem, er, at det er fuldt legalt at bruge de metoder, som benyttes - altså kopiere funktionaliteten.

Men man bliver nødt til selv at genskrive den på egen måde.

Og det er væsentligt lettere at læse i kildekoden end at reverse engineere (hvilket kun er tilladt til egen juridiske enhed i Danmark for at sikre operabilitet - man må ikke dele det med andre - så OpenOffice.org kunne ikke være blevet udviklet lovligt i Danmark ...).

De herligste hilsner
Claus Agerskov, AgerCon - Free & Open Source Software

  • 0
  • 0
Esben Nielsen

Du skal lige underbygge ordet "linke": Traditionelt skal LGPL koden ligge i et dynamisk linket library, som er under LGPL. Dvs. det kommer med kode OG buildscripts/projekt filer mm., som modtageren selv kan bygge det og udskifte det med hans egen modificerede version.

Men man kan faktisk også statisk linke til GPL kode: Man skal blot sikker på at modtageren kan genoversætte LGPL koden og genlinke det endelige program.

Man skal også passe på med header filer, som indeholder funktionelle makroer og inline funktioner. Det er vist aldrig blevet helt afklaret, hvor grænsen går...

  • 0
  • 0
Kristian Thy

Det virker bare til at være en omgåelse af netop det som du svarede "intet" til tidligere.

For mig er "hugge" ikke lig "linke til blob".

Forestil dig jeg har en robot bygget af LGPL-legoklodser. Må du bruge den i dit legorobotlegeland? Ja. Må du ændre den, eller kun bruge dele af den? Ja, hvis du fortæller hvad du har ændret. Du må stadig tage penge for at folk kommer ind og ser på, og du behøver ikke sige hvordan den anden robot er bygget.

Hvis robotten var bygget af GPL-klodser var dit robotimperie pludseligt blevet fælles, og du skulle afsløre hvordan du har bygget den seje robocop-model ovre i hjørnet.

  • 0
  • 0
Jesper Lund Stocholm Blogger

Hej alle og tak for jeres input.

Jeg var allerede klar over forskellen på de enkelte måder at linke til LGPL-komponenter på - men jeg var (og er stadig lidt) i tvivl om, hvor grænsen går.

Mit oprindelige spørgsmål er naturligvis inspireret af dilemmaet:

"I sin stræben på at blive kompatibel med OOo og dens formelimplementering i Calc - hvor meget af funktionaliteten i OOo må Microsoft putte i Office 2007 SP2 før de kommer i konflikt med LGPL (givet, naturligvis, at de ikke ønsker at udgive Office 2007s kilde som LGPL)?"

I den forbindelse er jeg lidt overrasket over, at man - iflg Henrik Jensens argumentation - kan udtrække og modificere den ønskede kildekode, udgive den som LGPL og så blot dynamisk linke til den - og dermed undgå kravet om offentliggørelse af egen kildekode. Jeg havde ikke selv tænkt på den vinkel før.

Jeg er også overrasket over Claus' udsagn om, at jeg må lade mig inspirere mig så meget jeg har lyst i LGPL-kode, når jeg blot selv taster koden ind og sørger for at den ikke "ligner" den oprindelige kode. Det indikerer for mig, at LGPL-licensen her "kun" dækker

"en konkret implementering af en idé"

og ikke

"en implementering af en konkret idé"

(men sidstnævnte lugter måske også lige lovligt meget af et SW-patent)

Det lykkedes mig i øvrigt at finde implementeringen af CEILING-metoden i OOo Calc. Den findes i filen math.cxx og ser således ud:

[code=cpp]/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: math.cxx,v $
* $Revision: 1.14 $
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html&gt;
* for a copy of the LGPLv3 License.
*
************************************************************************/
double SAL_CALL rtl_math_round(double fValue, int nDecPlaces,
enum rtl_math_RoundingMode eMode)
SAL_THROW_EXTERN_C()
{
OSL_ASSERT(nDecPlaces >= -20 && nDecPlaces <= 20);

if ( fValue == 0.0  )  
    return fValue;

// sign adjustment  
bool bSign = rtl::math::isSignBitSet( fValue );  
if ( bSign )  
    fValue = -fValue;

double fFac = 0;  
if ( nDecPlaces != 0 )  
{  
    // max 20 decimals, we don&#039;t have unlimited precision  
    // #38810# and no overflow on fValue*=fFac  
    if ( nDecPlaces &lt; -20 || 20 &lt; nDecPlaces || fValue &gt; (DBL_MAX / 1e20) )  
        return bSign ? -fValue : fValue;

    fFac = getN10Exp( nDecPlaces );  
    fValue *= fFac;  
}  
//else  //! uninitialized fFac, not needed

switch ( eMode )  
{  
    case rtl_math_RoundingMode_Corrected :  
    {  
        int nExp;       // exponent for correction  
        if ( fValue &gt; 0.0 )  
            nExp = static_cast&lt;int&gt;( floor( log10( fValue ) ) );  
        else  
            nExp = 0;  
        int nIndex = 15 - nExp;  
        if ( nIndex &gt; 15 )  
            nIndex = 15;  
        else if ( nIndex &lt;= 1 )  
            nIndex = 0;  
        fValue = floor( fValue + 0.5 + nKorrVal[nIndex] );  
    }  
    break;  
    case rtl_math_RoundingMode_Down :  
        fValue = rtl::math::approxFloor( fValue );  
    break;  
    case rtl_math_RoundingMode_Up :  
        fValue = rtl::math::approxCeil( fValue );  
    break;  
    case rtl_math_RoundingMode_Floor :  
        fValue = bSign ? rtl::math::approxCeil( fValue )  
            : rtl::math::approxFloor( fValue );  
    break;  
    case rtl_math_RoundingMode_Ceiling :  
        fValue = bSign ? rtl::math::approxFloor( fValue )  
            : rtl::math::approxCeil( fValue );  
    break;  
    case rtl_math_RoundingMode_HalfDown :  
    {  
        double f = floor( fValue );  
        fValue = ((fValue - f) &lt;= 0.5) ? f : ceil( fValue );  
    }  
    break;  
    case rtl_math_RoundingMode_HalfUp :  
    {  
        double f = floor( fValue );  
        fValue = ((fValue - f) &lt; 0.5) ? f : ceil( fValue );  
    }  
    break;  
    case rtl_math_RoundingMode_HalfEven :  
if defined FLT_ROUNDS

/*
Use fast version. FLT_ROUNDS may be defined to a function by some compilers!

DBL_EPSILON is the smallest fractional number which can be represented,  
its reciprocal is therefore the smallest number that cannot have a  
fractional part. Once you add this reciprocal to `x&#039;, its fractional part  
is stripped off. Simply subtracting the reciprocal back out returns `x&#039;  
without its fractional component.  
Simple, clever, and elegant - thanks to Ross Cottrell, the original author,  
who placed it into public domain.

volatile: prevent compiler from being too smart  

*/
if ( FLT_ROUNDS == 1 )
{
volatile double x = fValue + 1.0 / DBL_EPSILON;
fValue = x - 1.0 / DBL_EPSILON;
}
else

endif // FLT_ROUNDS
        {  
            double f = floor( fValue );  
            if ( (fValue - f) != 0.5 )  
                fValue = floor( fValue + 0.5 );  
            else  
            {  
                double g = f / 2.0;  
                fValue = (g == floor( g )) ? f : (f + 1.0);  
            }  
        }  
    break;  
    default:  
        OSL_ASSERT(false);  
    break;  
}

if ( nDecPlaces != 0 )  
    fValue /= fFac;

return bSign ? -fValue : fValue;  

}[/code]

http://svn.services.openoffice.org/opengrok/xref/DEV300_m47/sal/rtl/sour...

Alt i alt har jeg sådan set lært rigtigt meget det sidste døgns tid ... og phk, mit valg af ordet "stjæle" var naturligvis blot et forsøg på at drage opmærksomhed til artiklen.

:o)

  • 0
  • 0
Andreas Bach Aaen

Jesper Lund Stocholm skrev:

I den forbindelse er jeg lidt overrasket over, at man - iflg Henrik Jensens argumentation - kan udtrække og modificere den ønskede kildekode, udgive den som LGPL og så blot dynamisk linke til den - og dermed undgå kravet om offentliggørelse af egen kildekode. Jeg havde ikke selv tænkt på den vinkel før.

Dette er netop en af ideerne med Lesser GPL. Tænk på det ud fra en brugervinkel. Brugeren skal have mulighed for at tage LGPL delen af dit lukkede program og ændre eller rette fejl i koden og fortsat kunne benytte dit program.

"en konkret implementering af en idé"

og ikke

"en implementering af en konkret idé"

(men sidstnævnte lugter måske også lige lovligt meget af et SW-patent)

Lesser GPL licensen giver dig yderligere rettigheder i forhold til det som ophavsretsloven dækker. Det følger så nogle betingelse med.
Ophavsretten arbejder man med betegnelsen et værk. Et værk er ikke en ide, men en konkret instantiering af en ide. Ideen som sådan er ikke dækket ophavsretsmæssigt. Ideer kan beskyttes kommercielt udnyttelse af andre via patenter mod en offenliggørelse af ideen. Patentsystemer er tunge og dyre at danse med - og ikke særligt velfungerende inden for mange områder, hvis man vil skabe vækst og udvikling. Der er dog ikke nogen formålsparagraf, der siger, at det er dette man vil opnå med patenter. Ophavsretten er derimod givet så snart værket er skabt. Af dansk faglitteratur findes f.eks. Værkslæren i ophavsretten af Morten Rosenmeier om emnet.

  • 0
  • 0
Jesper Lund Stocholm Blogger

Hej Eskild,

[i](og tak for sidst)[/i]

A har skrevet et program i et programmeringssprog og udgivet det under GPL. B bruger A's kildekode som udgangspunkt/inspiration til at skrive et tilsvarende program i et andet sprog.
Skal B's program så udgives under GPL?

Ja, det var præcist min pointe. [i]Min[/i] opfattelse var, at så skulle Bs program naturligvis også udgives som GPL, men Claus' kommentar indikerer jo det modsatte.

  • 0
  • 0
Kristian Thy

Skal B's program så udgives under GPL?

Nej, det skal det ikke. Du har ikke modificeret den oprindelige kode(*).

*) Med forbehold for oversættelser mellem meget ens sprog. Der skal fx så vidt jeg ved ikke så meget til for at gøre et C-program til C++ og andre lignende spidsfindigheder. Men hvis du porter OOo til lisp mener jeg ikke der kan stilles krav i den retning.

  • 0
  • 0
Jesper Lund Stocholm Blogger

Eskild,

[b]Kristian:[/b]
Der skal fx så vidt jeg ved ikke så meget til for at gøre et C-program til C++

eller c++ til c#

Nemmerli, og da maskinelle oversætterprogrammer ikke er svære at finde imellem fx c++ og c# eller c# og Vb.Net, så er det jo reelt samme kode efter "transformationen".

[i]Jeg[/i] er i hvert fald lidt overrasket over, at man kan slippe "udenom" på denne måde - men jeg prøver sådan set ikke at modsige nogen af jer - det var jo netop grunden til mit blogindlæg.

:o)

  • 0
  • 0
Kristian Thy

Nemmerli, og da maskinelle oversætterprogrammer ikke er svære at finde imellem fx c++ og c# eller c# og Vb.Net, så er det jo reelt samme kode efter "transformationen".

Så er det sgu nok heller ikke tilladt :)

Det er ikke sort eller hvidt (så ville der jo ikke være brug for advokater), men må vel bero på en vurdering om du genbruger kildekoden eller har skabt noget nyt.

Alt det her palaver omkring (L)GPL er årsagen til at jeg foretrækker BSD-licensen.

  • 0
  • 0
Jesper Lund

Kristian Thy skrev:

Så er det sgu nok heller ikke tilladt :)

Det er ikke sort eller hvidt (så ville der jo ikke være brug for advokater), men må vel bero på en vurdering om du genbruger kildekoden eller har skabt noget nyt.

Alt det her palaver omkring (L)GPL er årsagen til at jeg foretrækker BSD-licensen.

Jeg kan ikke se at GPL vs BSD har nogen betydning for dette spørgsmål. Skabelse af et ophavsretsligt beskyttet værk kræver en selvstændig indsats, og det må ikke være et plagiat af andres arbejde.

At køre Fortran kode gennem f2c giver dig ikke ophavsretten til C koden. Hvis du derimod studerer Fortran koden, og laver din egen implementering i C uden "copy paste", har du ophavsretten til C koden, og du kan selv fastlægge reglerne for andre brug af din kode (licens).

  • 0
  • 0
Andreas Bach Aaen

Eskild Nielsen skrev:

A har skrevet et program i et programmeringssprog og udgivet det under GPL. B bruger A's kildekode som udgangspunkt/inspiration til at skrive et tilsvarende program i et andet sprog.
Skal B's program så udgives under GPL?

Svaret er et klart ja. Ordet udgangspunkt fælder den klare dom. Ophavsretten til et værk ændres ikke selv om værket oversættes fra et sprog til et andet. Her er det ligegyldigt om der er tale om et skift fra C til lisp eller fra en dansk bog til en engelsk film.

Ophavsretsloven er skrevet ud fra alle de rettigheder som ophavsmanden har. GPL's filosofi er tænkt ud fra brugerens synsvinkel, men må nødvendigvis udfærdiges som en licens der tager udgangspunkt i lovgivningen, som jo er beskrevet ud fra ophavsmandes synsvinkel. Hvis lovgivningen var beskrevet ud brugens synsvinkel, så havde GPL licensen set meget enklere ud.

Hvis man læser OpenOffices Lesser GPL kildekode og får en god ide - og så genimplementerer denne, så kan du frit vælge licens. På samme måde som det står dig frit for at skrive en krimi, hvor det er butleren, der er morderen. Der er selvfølgelig en grænse for hvor meget man må lade sig inspirere. Du må ikke skrive en Harry Potter nummer 7½, med hele det sædvanlige klientel og plot. Et softwarepatent derimod svarer til at det forbydes andre at skrive en krimi, hvori det er butleren, der er morderen.

  • 0
  • 0
Lars Bengtsson

Jeg er delvis enig med Andreas Bach Aaen, men jeg mener at du får for meget med i ophavsrettens område. Så vidt jeg er orienteret taler man om at ophavsretten dækker værket samt dets afledede værker. Der er der i den vestlige verden (muligvis i hele verden) en klar retspraksis for hvordan man bedømmer hvad der ikke er et afledet værk.

Og dette bygger (L)GPL på, så en oversættelse af noget kildekode vil være et afledet værk.

Men Anders går for vidt, jeg mener fx godt at man må skrive en Harry Potter 7½ (uden helt at vide hvad det er). Måske må man ikke give bogen den titel, men hvis indholdet er originalt, men bygger på Harry Potter universet er det lovligt.

Et afledet værk er også et værk hvor man har tilføjet til det oprindelige værk. Samt hist og her har udskiftet elementer. Men det er ikke afledet hvis det blot indeholder citater og ideer fra et andet værk.

Så: Nej, "udgangspunkt" er ikke fældende, men derimod substans; er værket i sin substans kopieret eller afledt er det omfattet af ophavsretten.

Med andre ord; hvis der er sket en transformation så substansen er bevaret eller der er der tilføjet til værket så er det et brud på ophavsretsloven (hvis man ikke har fået tilladelse fra rettighedshaveren).

  • 0
  • 0
Log ind eller Opret konto for at kommentere