2012-07-27 38 views
1

我對開源和許可證有基本的理解問題。有人可能請澄清以下情況的一些問題。對不起,如果它是非常基本的鏈接GLIBC靜態和專有軟件許可

  1. 我正在寫一個專有軟件,我打算使用一些開源庫。我也需要glibc和一個C編譯器,但不想使用我的操作系統默認的gcc工具鏈,所以我自己使用crosstools-ng

  2. 現在在ct-ng中,我猜libstdC++庫被鏈接靜態(這是C++和我不會用在大多數情況下,我猜),但從我的工具鏈配置是我的libc靜態或動態鏈接?如果是這樣的話,鑑於glibc是LGPL,並且我可以將它鏈接到我的專有軟件,這種靜態鏈接是否會導致我的許可問題?我的軟件能否靠近來源?或者我必須釋放編譯的對象。

我的工具鏈配置如下,從這可能有人指向我,如果glibc是靜態或動態鏈接?

Target: x86_64-some-linux-gnu 
Configured with: /home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/src/gcc-4.4.7/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=x86_64-some-linux-gnu --prefix=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu --with-sysroot=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu/x86_64-some-linux-gnu/sysroot --enable-languages=c,c++,fortran --with-pkgversion='crosstool-NG 1.15.3' --disable-sjlj-exceptions --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-mpfr=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-ppl=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-cloog=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --with-long-double-128 --disable-multilib --with-local-prefix=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu/x86_64-some-linux-gnu/sysroot --enable-c99 --enable-long-long 
Thread model: posix 
gcc version 4.4.7 (crosstool-NG 1.15.3) 
+0

如果您有興趣,我已經在area51上創建了與開源相關的所有內容的網站建議:http://area51.stackexchange.com/proposals/58715/open-source-licensing?referrer=8PFLrZ3ydnhFtbu7jPSDPA2 – 2013-09-22 11:24:36

+4

我是投票結束這個問題,因爲**是關於授權或法律問題**,而不是編程或軟件開發。 [見這裏](http://meta.stackoverflow.com/a/274964/1402846)瞭解更多信息,以及[幫助/話題]。 – 2015-06-04 23:52:05

回答

8

原因是多方面的,既有法律和技術,使libc.so動態鏈接。

在法律方面,GNU libc的LGPL許可證要求您允許用戶增強其libc;所以如果你銷售一個靜態鏈接的專有軟件(技術上不好的想法),你需要讓用戶把它重新鏈接到一個更好的libc版本;具體來說,您可能還需要提供軟件的*.o對象。

在技術方面,動態鏈接libc.so幾乎需要間接利用libdl.sold.so -i.e.的所有特徵。使用動態鏈接 - 尤其是NSS相關功能(如getpwentgetaddrinfo等等,參見nsswitch.conf(5) & nss(5))。此外,動態鏈接libc效率更高(RAM幾乎與所有使用libc.so的進程共享,並且可執行文件的大小更小;最重要的是,升級libc.so更容易)。

順便說一句,您的公司是否考慮讓您的Linux軟件免費(如在演講中)?它確實有很多優點,許多公司正在選擇開源路線。

+0

非常感謝您的回覆。我只是對我的問題做了一些更正。只有libstdC++靜態鏈接。但是,當我開始靜態鏈接libc時,我理解你的反應,正如你所說,我應該考慮釋放對象/動態鏈接,以便我的軟件用戶可以使用新的libc重新編譯。使我的Linux軟件開源的一部分是我正在考慮的東西(除開源lib之外無論如何是開源的),但不是全部源代碼,將會有一些專有代碼。 – devgp 2012-07-27 18:29:01

+0

LGPL仍然需要促進升級您鏈接的任何LGPL編輯庫。 – 2012-07-27 19:02:13

+0

動態鏈接並不總是這樣。當你使用MinGW編寫軟件時,在Windows下編譯和運行時,有一種習慣抱怨缺少* libc *。如果你正在編寫一個不需要自己的目錄的小型技術程序(例如BIOS更新程序),首選的方法是靜態編譯* libc *。 – 2014-08-28 15:01:54