From nobody Mon Jan 3 16:31:33 2022 X-Original-To: freebsd-arch@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 1B54B192CBD9 for ; Mon, 3 Jan 2022 16:32:17 +0000 (UTC) (envelope-from m.e.sanliturk@gmail.com) Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JSLr072Xrz4dhL; Mon, 3 Jan 2022 16:32:16 +0000 (UTC) (envelope-from m.e.sanliturk@gmail.com) Received: by mail-wr1-x436.google.com with SMTP id e5so70905262wrc.5; Mon, 03 Jan 2022 08:32:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=BQNp3/2TXyENqM2dC4UESQSRS9aXm2h5uOgqb5CaV2I=; b=BWsKSYJKM53QUo7E4dHFbtwkOpRWS/GV7egtKH30WgdfKzkbgCxl4d68xlcU2F9JEA qgmQ/5H2afupUOGVSCYU41dsUNAILyhgmTuapivdHmR0FlL8ZG0SKBYmEDrJRJnPBLS3 BYKXdUqKrii3zc9fGXTXuiqhZjOra06ML83CsXwduqGfcG/xfCRspbq61pCBNzMctGmf aRUyp7tupJNBw8wI50bP4XkBWbJ3tGyzYvs9W77qWz98EcXy8zyIRee9rguo1Lwxwjpr MmNlT3yAXkMCSTmEjtaMwwuwSPhJH7FkHxH++CPXhzfOyPZ8HyViKYiYmVzOv6WhOoDp e/xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=BQNp3/2TXyENqM2dC4UESQSRS9aXm2h5uOgqb5CaV2I=; b=jMK1o6lCmMVXGucawf9HTYJzdfdBU8bRnH+yWqGUqIXKVHrQiJSymN1wH7Vz4NS7bQ T1JF+n1KdZc47XVjbORqrSesc3gLOdDL6HVW0KHU81NcAaR9OhXwZrHdgjLAqe3bUJt5 X4fZtsO0eUfjlpJgnhtyOOOGGnCR8u/cz5xkgtiGdiLq7WL1A8rqytLEosDzx5n/ux3m CKFVCh5lWGNoLQGke3jOuZVAq1ZWrB8d35crpo6joyOioZYVPsMf+gxF1F91RbYer1FV m10/RF7W1Jq6aTao6RTBUMWKmVoFQ/pgjtZC354uUQlseeaQ24K1yYim34veyAc3nXdz A2Og== X-Gm-Message-State: AOAM5324sy7Oxsklqm73wy7CjocXUAl1EBq6zbD+WeIsYaqtojc2OgVp LYWFWz8WmH50dmYTEPA5ryvlX4fMviBlJhI5q2TP7gQaYnSkZw== X-Google-Smtp-Source: ABdhPJyA0Sw9s5CgS5IWjfDyOCni9Pi6IbG+OaVk4W1TDxQ2A3l2+WT26DYgiu3VgSqpApHL/VtQeGloMCIReNpZmv4= X-Received: by 2002:a5d:44ce:: with SMTP id z14mr38817478wrr.383.1641227530161; Mon, 03 Jan 2022 08:32:10 -0800 (PST) List-Id: Discussion related to FreeBSD architecture List-Archive: https://lists.freebsd.org/archives/freebsd-arch List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-arch@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mehmet Erol Sanliturk Date: Mon, 3 Jan 2022 19:31:33 +0300 Message-ID: Subject: Re: LGPL code in /usr/tests? To: Alan Somers Cc: Warner Losh , "freebsd-arch@freebsd.org" Content-Type: multipart/alternative; boundary="000000000000ee500205d4b00f39" X-Rspamd-Queue-Id: 4JSLr072Xrz4dhL X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; TAGGED_FROM(0.00)[]; REPLY(-4.00)[] X-Spam: Yes X-ThisMailContainsUnwantedMimeParts: N --000000000000ee500205d4b00f39 Content-Type: text/plain; charset="UTF-8" On Mon, Jan 3, 2022 at 5:47 PM Alan Somers wrote: > On Mon, Jan 3, 2022 at 12:37 AM Mehmet Erol Sanliturk > wrote: > > > > > > > > On Mon, Jan 3, 2022 at 9:31 AM Warner Losh wrote: > >> > >> Top posting my reactions (sorry) > >> > >> I think 'in base as a private library, used only in the tests protected > by MK_LGPL' is fine. > >> > >> This would keep it in base, keep the testing happening, and allow those > who want > >> to omit it. This would also not run afoul of any companies that still > have downloading > >> GPL'd software is a fireable offense, since all such policies I heard > about years ago > >> were specifically the GPL, not the LGPL). This is of course a trade off > between > >> getting something useful from the LGPL software (better testing) and > our desires > >> not to have any in the tree at all, if possible. Adding a knob would > let it be shut > >> off easily with all the tests disabled that depend on it. This is also > in keeping with > >> our historical practices of having software with undesirable licenses > as long as it > >> gets us something. > >> > >> I think this is better than the ports options because it will get more > use and exposure > >> this way and is more likely to remain working (though with our current > CI setup > >> adding it as a dependency for that CI would be easy and give us decent > coverage). > >> > >> Warner > >> > > > > > > > > https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License > > GNU Lesser General Public License > > > > https://en.wikipedia.org/wiki/Copyleft#Strong_and_weak_copyleft > > Strong and weak copyleft > > > > > > "GNU Lesser General Public License" is a WEAK copyleft license ( it may > be considered "benign" : it does not invade the user software , affects > only the modifications to the LGPL licensed software ) , > > > > in spite of this , > > > > "GNU General Public License" is a STRONG copyleft license ( it may be > considered "malignant" : it invades the user software as a whole ) . > > > > > > Using a ( LGPL licensed software ) for testing another software is not > directly involved in the tested software . > > > > To eliminate possible doubts , if I were the decision maker about how to > use it , I would make it a port , and fetch it during testing as a > dynamically loaded library ( manage it port with respect to its license ) . > > > > > > Mehmet Erol Sanliturk > > > The problem is that the library, not just the headers, needs to be > present at compile time. Or do you know a good workaround? > You can fetch the LGPL licensed sources during compile time from outside of the FreeBSD base known to the testing program . The user(s) of FreeBSD can also use a similar facility . For example : I am developing mainly two programs : (1) Mathematical Analysis computations (2) A Multi-media information management system These programs are using parts taken from legally personally usable sources which can not be used for a ( free or commercial ) distribution . During program development , it is possible to use them , because they are in there just as a filler for not-implemented-yet parts . To prevent unacceptable inclusion of such sources into my own productions , I am using global directories outside of the program directories : /KBMS/Parts_to_ be_Removed/... ( Part specific directories ) /MAS/Parts_to_ be_Removed/... ( Part specific directories ) It is explicitly known that these directories and their contents can not be used . There is no danger of including them erroneously . You can define such directories . During compilation you may fetch LGPL licensed parts from these directories ( even though they may be on the Internet ) . After compilation of the programs ( and if they are executed ) you may discard them . By supplying a script to manage such issues , users of the FreeBSD may also use the associated external directories created in their systems and used during their works . The main problem for the LGPL licensed sources is the modifications performed in them . If there are such parts they should be open sourced , not the sources of the user sources . The closed source programs will not be affected from such modifications . Some closed source program developers may not want to handle legal implications of these modified or not modified LGPL licensed parts even when they are distributed because any failure of distribution of especially modified sources may cause significant trouble for them . To eliminate such distribution related concerns , the best action may be to store these sources into a publicly accessible repository , modify these sources in that repository and use them from this repository . In this case , modifications in the main repository and excluding of these from FreeBSD distributions will not affect FreeBSD users other than fetching them when they are needed , which is legally acceptable and harmless . Generation of a package or port from this repository may be necessary or not , I will not be able to say anything because I do not know . The port or package generator persons would know such points . My opinion is that the above model may not require either a port or a package separately because everything necessary will be in the repository . Mehmet Erol Sanliturk > > > > > > > > > > >> > >> On Fri, Dec 31, 2021 at 2:22 PM Alan Somers > wrote: > >>> > >>> I recently ran into a bug in fusefs that can only be triggered when > >>> NFS exports a FUSE file system. That makes it very difficult to write > >>> an automated test. My options are basically: > >>> > >>> * Add an fhgetdirentries(2) syscall that is like getdirentries, but > >>> takes a fhandle_t* argument instead of a file descriptor. > >>> * Actually start nfsd during the test, and export the temporary FUSE > filesystem. > >>> > >>> The first option sounds like way too much non-test code to change. > >>> Plus, I may need to add thread() and fhwrite() syscalls too, for other > >>> NFS-related test cases. The second option would also be a lot of > >>> work, but at least the work would all be confined to the test code. > >>> However, what would I do once I've exported the file system? Mounting > >>> it with the NFS client would add several more layers to the stack > >>> under test. I'm not even sure that it's safe to self-mount an > >>> exported file system. Another option would be to communicate directly > >>> with nfsd from the test code. That's possible, but writing NFS RPCs > >>> by hand is very cumbersome, and it would obscure the test logic. A > >>> better option is to use libnfs. The API is just what I would need. > >>> However, it's licensed under the LGPL 2.1. I know that we as a > >>> project decided to import no new GPLish code into contrib/. But this > >>> code would never be used outside of /usr/tests, so it wouldn't even > >>> affect many production builds. Would that be acceptable? The > >>> workarounds are ugly: > >>> > >>> * Create a new port for all libnfs-dependent tests. This would be > >>> hard to maintain, because the content of the tests must be so > >>> dependent on the base version of the OS. > >>> * Write the tests in Python using libnfs-python. The tests could > >>> still be compiled as part of the base system, they just wouldn't work > >>> unless libnfs-python is installed from ports. But this is awkward > >>> because the tests are currently C++. So I would have to embed a > >>> Python interpreter into the C++ code. It would really obfuscate the > >>> test logic. > >>> * Store the tests in the base system, but detached from the build. > >>> Then create a port that builds them by mounting SRC_BASE, much like > >>> devel/py-libzfs does. It would then install them in /usr/local/tests. > >>> This is probably the least-bad option if I can't import libnfs into > >>> contrib/. > >>> > >>> What do you think? Is it acceptable to import libnfs intro contrib/? > >>> It's LGPL, except for a few headers that are BSD and some examples > >>> that are GPLv3. But we needn't use the examples, or even import them. > >>> > >>> https://github.com/sahlberg/libnfs > >>> > --000000000000ee500205d4b00f39 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Mon, Jan 3, 2022 = at 5:47 PM Alan Somers <asomers@f= reebsd.org> wrote:
On Mon, Jan 3, 2022 at 12:37 AM Mehmet Erol Sanliturk
<m.e.sanlit= urk@gmail.com> wrote:
>
>
>
> On Mon, Jan 3, 2022 at 9:31 AM Warner Losh <imp@bsdimp.com> wrote:
>>
>> Top posting my reactions (sorry)
>>
>> I think 'in base as a private library, used only in the tests = protected by MK_LGPL' is fine.
>>
>> This would keep it in base, keep the testing happening, and allow = those who want
>> to omit it. This would also not run afoul of any companies that st= ill have downloading
>> GPL'd software is a fireable offense, since all such policies = I heard about years ago
>> were specifically the GPL, not the LGPL). This is of course a trad= e off between
>> getting something useful from the LGPL software (better testing) a= nd our desires
>> not to have any in the tree at all, if possible. Adding a knob wou= ld let it be shut
>> off easily with all the tests disabled that depend on it. This is = also in keeping with
>> our historical practices of having software with undesirable licen= ses as long as it
>> gets us something.
>>
>> I think this is better than the ports options because it will get = more use and exposure
>> this way and is more likely to remain working (though with our cur= rent CI setup
>> adding it as a dependency for that CI would be easy and give us de= cent coverage).
>>
>> Warner
>>
>
>
>
> https://en.wikipedia.org/wiki/GN= U_Lesser_General_Public_License
> GNU Lesser General Public License
>
> https://en.wikipedia.org/wiki/Co= pyleft#Strong_and_weak_copyleft
> Strong and weak copyleft
>
>
> "GNU Lesser General Public License" is a=C2=A0 WEAK copyleft= license ( it may be considered "benign" : it does not invade the= user software , affects only the modifications to the LGPL licensed softwa= re ) ,
>
> in spite of this ,
>
> "GNU General Public License" is a STRONG copyleft license ( = it may be considered "malignant" : it invades the user software a= s a whole ) .
>
>
> Using a ( LGPL licensed software ) for testing another software is not= directly involved in the tested software .
>
> To eliminate possible doubts , if I were the decision maker about how = to use it , I would make it a port , and fetch it during testing as a dynam= ically loaded library ( manage it port with respect to its license ) .
>
>
> Mehmet=C2=A0 Erol Sanliturk





=C2=A0
The problem is that the library, not just the headers, needs to be
present at compile time.=C2=A0 Or do you know a good workaround?



You can f= etch the LGPL licensed sources during compile time from outside of the Free= BSD
base known to the testing program . The user(s) of=C2=A0= FreeBSD can also use a similar facility .

For example :

I am developing mainly = two programs :

(1) Mathematical Analysis= computations
(2) A Multi-media information management = system

These programs are using parts ta= ken from legally personally usable sources=C2=A0 which
= can not be used for a ( free or commercial ) distribution . During program = development ,
it is possible to use them , because they= are in there just as a filler for=C2=A0 not-implemented-yet parts .

To prevent unacceptable inclusion of such = sources into my own productions , I am
using global director= ies=C2=A0 outside of the program directories :

/KBMS/Parts_to_ be_Removed/... ( Part specific directories )
/MAS/Parts_to_ be_Removed/... ( Part specific directories )

It is explicitly known that these directori= es and their contents can not be used .
There is no danger o= f including them erroneously .


You can define such directories . During compilation you may fet= ch LGPL licensed
parts from these directories ( even th= ough they may be on the Internet ) . After compilation of
= the programs ( and if they are executed ) you may discard them . By supplyi= ng a script to manage such issues , users of the FreeBSD may also use the a= ssociated external directories created in their systems and used during the= ir works .


The = main problem for the LGPL licensed sources is the modifications performed <= br>
in them . If there are such parts they should be open so= urced , not the sources of the
user sources . The closed sou= rce programs will not be affected from such modifications .
=
Some closed source program developers may not want to h= andle legal implications of
these modified or not modified L= GPL licensed parts even when they are distributed=C2=A0 because any failure= of distribution of especially modified sources may cause significant troub= le for them . To eliminate such distribution related concerns , the best ac= tion may be to store
these sources into a publicly acce= ssible repository , modify these sources in that repository and use them=C2= =A0 from this repository . In this case , modifications in the main reposit= ory and excluding of these from FreeBSD distributions will not affect FreeB= SD users other than fetching them when they are needed , which is legally a= cceptable and harmless .

Generation of a= package or port from this repository=C2=A0 may be necessary or not ,
<= /div>
I will not be able to say anything because I do not know . T= he port or package
generator persons would know such po= ints . My opinion is that the above model
may not requi= re either a port or a package separately because=C2=A0 everything necessary=
will be in the repository .



Mehmet Erol Sanliturk<= br>



= =C2=A0

>
>
>
>
>>
>> On Fri, Dec 31, 2021 at 2:22 PM Alan Somers <asomers@freebsd.org> wrote: >>>
>>> I recently ran into a bug in fusefs that can only be triggered= when
>>> NFS exports a FUSE file system.=C2=A0 That makes it very diffi= cult to write
>>> an automated test.=C2=A0 My options are basically:
>>>
>>> * Add an fhgetdirentries(2) syscall that is like getdirentries= , but
>>> takes a fhandle_t* argument instead of a file descriptor.
>>> * Actually start nfsd during the test, and export the temporar= y FUSE filesystem.
>>>
>>> The first option sounds like way too much non-test code to cha= nge.
>>> Plus, I may need to add thread() and fhwrite() syscalls too, f= or other
>>> NFS-related test cases.=C2=A0 The second option would also be = a lot of
>>> work, but at least the work would all be confined to the test = code.
>>> However, what would I do once I've exported the file syste= m?=C2=A0 Mounting
>>> it with the NFS client would add several more layers to the st= ack
>>> under test.=C2=A0 I'm not even sure that it's safe to = self-mount an
>>> exported file system.=C2=A0 Another option would be to communi= cate directly
>>> with nfsd from the test code.=C2=A0 That's possible, but w= riting NFS RPCs
>>> by hand is very cumbersome, and it would obscure the test logi= c.=C2=A0 A
>>> better option is to use libnfs.=C2=A0 The API is just what I w= ould need.
>>> However, it's licensed under the LGPL 2.1.=C2=A0 I know th= at we as a
>>> project decided to import no new GPLish code into contrib/.=C2= =A0 But this
>>> code would never be used outside of /usr/tests, so it wouldn&#= 39;t even
>>> affect many production builds.=C2=A0 Would that be acceptable?= =C2=A0 The
>>> workarounds are ugly:
>>>
>>> * Create a new port for all libnfs-dependent tests.=C2=A0 This= would be
>>> hard to maintain, because the content of the tests must be so<= br> >>> dependent on the base version of the OS.
>>> * Write the tests in Python using libnfs-python.=C2=A0 The tes= ts could
>>> still be compiled as part of the base system, they just wouldn= 't work
>>> unless libnfs-python is installed from ports.=C2=A0 But this i= s awkward
>>> because the tests are currently C++.=C2=A0 So I would have to = embed a
>>> Python interpreter into the C++ code.=C2=A0 It would really ob= fuscate the
>>> test logic.
>>> * Store the tests in the base system, but detached from the bu= ild.
>>> Then create a port that builds them by mounting SRC_BASE, much= like
>>> devel/py-libzfs does.=C2=A0 It would then install them in /usr= /local/tests.
>>> This is probably the least-bad option if I can't import li= bnfs into
>>> contrib/.
>>>
>>> What do you think?=C2=A0 Is it acceptable to import libnfs int= ro contrib/?
>>> It's LGPL, except for a few headers that are BSD and some = examples
>>> that are GPLv3.=C2=A0 But we needn't use the examples, or = even import them.
>>>
>>> https://github.com/sahlberg/libnfs
>>>
--000000000000ee500205d4b00f39--