開源協議-Linux哲學思想-Linux目錄結構

一、開源協議
常見開源協議有GPL、LGPL、BSD、Apache、MPL、MIT等
開源協議-Linux哲學思想-Linux目錄結構

GPL

在自由軟件所使用的各種許可證之中,最爲人們注意的也許是通用公開許可證(General Public License,簡稱GPL)。

GPL同其它的自由軟件許可證一樣,許可社會公衆享有:運行、複製軟件的自由,發行傳播軟件的自由,獲得軟件源碼的自由,改進軟件並將自己作出的改進版本向社會發行傳播的自由。

GPL還規定:只要這種修改文本在整體上或者其某個部分來源於遵循GPL的程序,該修改文本的 整體就必須按照GPL流通,不僅該修改文本的源碼必須向社會公開,而且對於這種修改文本的流通不准許附加修改者自己作出的限制。

因此,一項遵循GPL流通 的程序不能同非自由的軟件合併。GPL所表達的這種流通規則稱爲copyleft,表示與copyright(版權)的概念“相左”。

GPL授予程序接受人以下權利,或稱“自由”:

  • 以任何目的運行此程序的自由

  • 以學習程序工作機理爲目的,對程序進行修改的自由(能得到源代碼是前提)

  • 再發行復製件的自由

  • 改進此程序,並公開發布改進的自由(能得到源代碼是前提)

GPL協議最主要的幾個原則:

1、確保軟件自始至終都以開放源代碼形式發佈,保護開發成果不被竊取用作商業發售。任何一套軟 件,只要其中使用了受 GPL協議保護的第三方軟件的源程序,並向非開發人員發佈時,軟件本身也就自動成爲受 GPL 保護並且約束的實體。也就是說,此時它必須開放源代碼。

2、GPL 大致就是一個左側版權(Copyleft,或譯爲“反版權”、“版權屬左”、“版權所無”、“版責”等)的體現。你可以去掉所有原作的版權 信息,只要你保持開源,並且隨源代碼、二進制版附上 GPL 的許可證就行,讓後人可以很明確地得知此軟件的授權信息。GPL 精髓就是,只要使軟件在完整開源 的情況下,儘可能使使用者得到自由發揮的空間,使軟件得到更快更好的發展。

3、無論軟件以何種形式發佈,都必須同時附上源代碼。例如在 Web 上提供下載,就必須在二進制版本(如果有的話)下載的同一個頁面,清楚地提供源代碼下載的鏈接。如果以光盤形式發佈,就必須同時附上源文件的光盤。

4、開發或維護遵循 GPL 協議開發的軟件的公司或個人,可以對使用者收取一定的服務費用。但還是一句老話——必須無償提供軟件的完整源代碼,不得將源代碼與服務做捆綁或任何變相捆綁銷售。

LGPL

GNU寬鬆用公共許可證,簡稱LGPL(GNU Lesser General Public License),被用於一些(但不是全部)GNU程序庫。這個許可證以前被稱爲GNU庫(Library)通用公共許可證。

LGPL是GPL的變種,也是GNU爲了得到更多的甚至是商用軟件開發商的支持而提出的。與GPL的最大不同是,可以私有使用LGPL授權的自由軟件,開發出來的新軟件可以是私有的而不需要是自由軟件。所以任何公司在使用自由軟件之前應該保證在LGPL或其它GPL變種的授權下。

BSD

BSD開源協議是一個給於使用者很大自由的協議。可以自由的使用,修改源代碼,也可以將修改後的代碼作爲開源或者專有軟件再發布。當你發佈使用了BSD協議的代碼,或者以BSD協議代碼爲基礎做二次開發自己的產品時,需要滿足三個條件:

1、如果再發布的產品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。

2、如果再發布的只是二進制類庫/軟件,則需要在類庫/軟件的文檔和版權聲明中包含原來代碼中的BSD協議。

3、不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

BSD代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由於允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發佈和銷售,因此是對商業集成很友好的協議。很多公司企業在選用開源產品的時候都首選BSD協議,因爲可以完全控制這些第三方的代碼,在必要的時候可以修改或者 二次開發。

Apache

Apache License是著名的非盈利開源組織Apache採用的協議。該協議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作爲開源或商業軟件)。

需要滿足的條件:

1、需要給代碼的用戶一份Apache License。

2、如果你修改了代碼,需要在被修改的文件中說明。

3、在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議、商標、專利聲明和其他原來作者規定需要包含的說明。

4、如果再發布的產品中包含一個Notice文件,則在Notice文件中需要帶有Apache License。你可以在Notice中增加自己的許可,但不可以表現爲對Apache License構成更改。

Apache License也是對商業應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要並作爲開源或商業產品發佈/銷售。

MPL

MPL是The Mozilla Public License的簡寫,是1998年初Netscape的 Mozilla小組爲其開源軟件項目設計的軟件許可證。MPL許可證出現的最重要原因是,Netscape公司認爲GPL許可證沒有很好地平衡開發者對源代碼的需求和他們利用源代碼獲得的利益。同著名的GPL許可證和BSD許可證相比,MPL在許多權利與義務的約定方面與它們相同(因爲都是符合OSIA認定的開源軟件許可證)。但是,相比而言MPL還有以下幾個顯著的不同之處:

1、MPL雖然要求對於經MPL許可證發佈的源代碼的修改也要以MPL許可證的方式再許可出來,以保證其他人可以在MPL的條款下共享源代碼。但是,在MPL許可證中對“發佈”的定義是“以源代碼方式發佈的文件”,這就意味着MPL允許一個企業在自己已有的源代碼庫上加一個接口,除了接口程序的源代碼以MPL許可證的形式對外許可外,源代碼庫中的源代碼就可以不用MPL許可證的方式強制對外許可。這些,就爲借鑑別人的源代碼用做自己商業軟件開發的行爲留了一個豁口。

2、MPL許可證第三條第7款中允許被許可人將經過MPL許可證獲得的源代碼同自己其他類型的代碼混合得到自己的軟件程序。

3、對軟件專利的態度,MPL許可證不像GPL許可證那樣明確表示反對軟件專利,但是卻明確要求源代碼的提供者不能提供已經受專利保護的源代碼(除非他本人是專利權人,並書面向公衆免費許可這些源代碼),也不能在將這些源代碼以開放源代碼許可證形式許可後再去申請與這些源代碼有關的專利。

4、對源代碼的定義
而在MPL(1.1版本)許可證中,對源代碼的定義是:“源代碼指的是對作品進行修改最優先擇取的形式,它包括:所有模塊的所有源程序,加上有關的接口的定義,加上控制可執行作品的安裝和編譯的‘原本’(原文爲‘Script’),或者不是與初始源代碼顯著不同的源代碼就是被源代碼貢獻者選擇的從公共領域可以得到的程序代碼。”

5、MPL許可證第3條有專門的一款是關於對源代碼修改進行描述的規定,就是要求所有再發布者都得有一個專門的文件就對源代碼程序修改的時間和修改的方式有描述。

MIT

MIT是和BSD一樣寬範的許可協議,作者只想保留版權,而無任何其他了限制。也就是說,你必須在你的發行版裏包含原許可協議的聲明,無論你是以二進制發佈的還是以源代碼發佈的。

二、Linux的哲學思想

1.一切皆文件
2.實現單一目的的小程序
3.組合小程序完成複雜任務
4.文本文件保存配置信息
5.儘量避免捕獲用戶接口
6.提供機制,而非策略(所謂機制就是“提供什麼功能”;策略就是“實現什麼功能”)

在Linux操作系統是以根、目錄、文件的形式進行存儲數據的,一切的存儲數據、字符、塊設備都以文件的形式
存儲在以根爲源的樹裝文件目錄中; 所有可運行的程序或可執行的操作都以簡單的命令形式存放在操作系統的源碼包內,使用方便、單一、直接,這樣才能保證Linux更能高效運行;對於複雜的任務可通過相應的命令執行多個小程序來實現複雜的功能;在Linux操作系統中任何服務、軟件的配置信息都存在對應路徑下的文本文件中,可查看修改其配置信息;Linux的用戶模式區分明確,不同用戶權限不同,方便使用者使用;因爲Linux爲開源產品,所以提供的都是機制,爲使用者提供了更大的空間使其更好地實現它。

三、Linux目錄結構以及目錄結構命名規定

開源協議-Linux哲學思想-Linux目錄結構

文件系統 FHS(filesystem hierarchy standard)

/bin: 所有用戶可用的基本命令程序文件;
/sbin:供系統管理使用的工具程序;
/boot:引導加載器必須用到的各靜態文件:kernel、inintramfs(inintrd)、grub等;
/dev:存儲特殊文件或設備文件;
    設備有兩種類型:字符設備(線性設備)、塊設備(隨機設備)
/etc:系統程序的配置文件,只能爲靜態;
/home:普通用戶的家目錄;一般每個普通用戶的家目錄默認爲此目錄與用戶同名的子目錄,
    如/home/USERNAME
/root:管理員的家目錄;可選;
/lib:爲系統啓動或根文件系統上的應用程序(/bin、/sbin等)提供共享庫,以及爲內核提供內核模塊
    libc.so.*:動態鏈接的C庫;
    ld*:運行時鏈接器/加載器;
    modules:用於存儲內核模塊的目錄;
/lib64:64位系統特有的存放64位共享庫的路徑;
/media:便捷式設備掛載點,可選路徑;
/mnt:其他文件系統的臨時掛載點;
/opt:附加程序的安裝位置,可選路徑;
/srv:當前爲服務提供的數據;
/tmp:爲那些會產生臨時數據的程序提供用於存儲臨時文件的目錄。可供所有用戶操作;有特殊權限;
/usr:usr Hierarchy ,全局共享的只讀數據路徑;
    bin,sbin;
    lib,lib64;
    include:C程序的頭文件;
/share:命令手冊和自帶文檔等架構持有的文件存儲位置;
/local:另一層級目錄;
X11R6:X-window程序的安裝位置;
/src:程序源代碼文件的存儲位置;
/usr/local/:Local hierarchy,讓系統管理員安裝本地程序;也通常用於安裝第三方程序;
/var:/var hierachy 存儲發生變化的數據目錄;
    cache: Application cache data
    lib:Variable state information
    local:  Variable data for /usr/local
    lock:   Lock files
    log:    Log files and directories
    opt:    Variable data for /opt
    run:    Data relevant to running processes
    spool:  Application spool data
    tmp:    Temporary files preserved between system reboots、
/proc: 基於內存的虛擬文件系統,用於爲內核及進程存儲的相關信息;他們爲內核參數,
    例如:net.ipv4_forward,虛擬路由爲/net/ipv4/ip_forward,存儲於/proc/sys,
    因此其完整的路徑爲/proc/sys/net/ipv4/ip_forward;
/sys:sysfs 虛擬文件系統 提供了一種比proc更爲理想的訪問內核數據的路徑;
其主要作用在於爲管理Linux設備提供一種統一的模型接口;

參考:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章