里程碑:DTrace 切換到 GPL 許可證 頂 原 薦

News:dtrace dropped the CDDL and switched to the GPL!

根據 2月14日 Brendan Gregg 在 Twitter 上推送的消息:Oracle 已經將 DTrace 模塊的開源許可證從 CDDL 切換到 GPL,預計最快到 2018 年底 Linux kernel 就可以發佈一個可用的 /usr/sbin/dtrace ,底層基於 bcc 和 eBPF 。

Good news from Oracle: DTrace is GPL'd (thank you!). I'd guess by the end of 2018 we'll have a working /usr/sbin/dtrace on Linux for running D scripts (using libbcc+eBPF on the backend)

關於動態追蹤技術(Dynamic Tracing),我們在之前的文章已經有所介紹,動態追蹤技術(一):DTrace 導論 。DTrace 是動態追蹤技術的鼻祖,源自 Solaris 操作系統,提供了高級性能分析和調試功能( advanced performance analysis and troubleshooting tool )。

Oracle 收購 SUN 公司之後推出了 Oracle Linux DTrace (基於 Oracle 企業級內核 Unbreakable Enterprise Kernel ,UEK),針對性地發展完善了一系列探針如 syscall, profile, sdt, proc, sched 和 USDT,受制於諸多原因一直沒有進入 Linux kernel 代碼樹,其中最大的一個障礙是許可授權問題:DTrace 源代碼採用 CDDL 許可證,不兼容 Linux kernel 使用的 GPLv2 許可證,無法直接移植。

 commit e1744f50ee9bc1978d41db7cc93bcf30687853e6
 Author: Tomas Jedlicka <[email protected]>
 Date: Tue Aug 1 09:15:44 2017 -0400

 dtrace: Integrate DTrace Modules into kernel proper

 This changeset integrates DTrace module sources into the main kernel
 source tree under the GPLv2 license. Sources have been moved to
 appropriate locations in the kernel tree.

CDDL vs GPL

DTrace 與 OpenSolaris 一樣之前是基於 CDDL 許可證而不是 Linux kernel 使用的 GPL 許可證,二者的區別是什麼呢?

GNU通用公共許可協議(GNU General Public License,簡稱 GNU GPL、GPL,港臺地區翻譯爲“GNU通用公共授權條款”)是廣泛使用的免費軟件許可證,最初由GNU項目的自由軟件基金會(FSF)的理查德·斯托曼(Richard Matthew Stallman)撰寫。 

一般的版權概念(“copyright”),從不授予用戶任何權利(除了使用的權利),更多的是限制性規定,例如複製、修改、分發等,也可以包括一些法律允許的行爲,比如逆向工程。GPL 則代表了知識產權制度的左翼陣營(“copyleft”),它授予被許可人以下權利(或稱“自由”):

  • 以任何目的運行此程序的自由;
  • 再複製的自由;
  • 修改程序並公開發布改進版的自由(前提是能得到源代碼)。

GPL 及其它 Copyleft 協議授予了被許可人(幾乎是任何人)以非常廣泛的自由,同時利用版權法設計了“傳染機制”:GPL明確規定,任何源碼的衍生產品,如果對外發布,都必須保持同樣的許可證。這就是說,任何人只要發佈基於某個GPL軟件的修改版本,他就必須公開源碼,並且同意他人可以自由地複製和分發,否則原始作者可以根據版權法起訴 。

DTrace 的 CDDL 許可證繼承自 Sun Microsystems 。通用開發與發行許可證(Common Development and Distribution License,簡稱CDDL) 是一個由 Sun 提出的授權協議,它以 Mozilla 公共許可證(MPL)1.1版本爲基礎。基於 CDDL 許可證的項目主要有:OpenSolaris (含 DTrace 和 ZFS) 、NetBeans IDE 、GlassFish 等。

Like the MPL, the CDDL is a weak copyleft license in-between GPL license and BSD/MIT permissive licenses, requiring only source code files under CDDL to remain under CDDL.

鑑於 GPL 許可模式下很難通過開源軟件直接盈利,因此也有很多類似 CDDL 的開源協議傾向於支持商業開發,授予廠商更大的決定權。CDDL 最大的特點是源代碼和可執行文件允許採用不同的許可證。例如一般不存在 GPL 模式下存在的 “社區”版本,而是由廠商提供一些免費版本供開發者在非生產環境下使用,同時附上 CDDL 許可的源代碼,開發者可以自行編譯和部署;更重要的是,廠商只對付費客戶提供安全補丁修復和維護版本的源代碼。

綜上所述,基於 CDDL 許可證的 DTrace 你只可以使用但不允許圍繞代碼進行修改,或者添加其他跟蹤點。Paul Fox 個人貢獻的dtrace4linux 項目就試圖移植 Sun DTrace 到 Linux 的 ,但是受限於許可證只能做到附加產品(add-on), 外部人員很難直接參與進來,事實上 CDDL 許可證的項目外部貢獻最多一般不會超過 10% 。

Future

在此之前,Linux 已經擁有 SystemTap 和動態探針(dprobes),DTrace 是基於整個系統的全局跟蹤、調試、分析工具。Linux kernel 的創建者顯然不喜歡一個“複雜”的系統(large system), 他們傾向於將跟蹤、分析和探測劃分爲彼此獨立的小單元。許多開發者爲此發明了各種鉤子(hooks)以及整合某些特定探針(probes)的便利工具,例如 kprobes , uprobes, markers 等。 dtrace for linux 正式進入 Linux kernel 之後,有望將相關技術整合成一個更強大的體系,這一點非常令人期待。

里程碑:Linux 合併 BPF

2016年11月,Linux 4.9-rc1發佈,正式合併了一項重要特性:BPF追蹤(Timed sampling)。

系統性能領域的國際導師Brendan Gregg,感動得都快哭了,當即在Twitter上表示這是一個重要的里程碑! 他隨後又寫了一篇長文《DTrace for Linux 2016》,以示慶祝。

As a long time DTrace user and expert, this is an exciting milestone! --Brendan Gregg

Linux 合併了BPF而已嘛,跟DTrace這個勞什子有什麼關係呢?

DTrace 是動態追蹤技術的鼻祖,源自 Solaris 操作系統,提供了高級性能分析和調試功能,它的源代碼採用 CDDL 許可證,不兼容 Linux 內核使用的 GPLv2 許可證,無法直接移植。當然,江湖上還有另外一種說法,Linux之所以一直沒有原生支持DTrace,是因爲Linus 覺得這玩意沒什麼必要。Anyway,隨着 BPF跟蹤的最後主要功能合併到 Linux 4.9-rc1,Linux 現在有了類似 DTrace 的高級分析和調試功能。

Linux 這次合併的BPF(The Berkeley Packet Filter ),來自於加州大學伯克利分校(這所大學很有意思,以後還要反覆提到)。BPF,顧名思義,最早只是一個純粹的封包過濾器,後來在很多牛人的參與下,進行了擴展,得到了一個所謂的 eBPF,可以作爲某種更加通用的內核虛擬機。通過這種機制,我們其實可以在 Linux 中構建類似 DTrace 那種常駐內核的動態追蹤虛擬機。

Linux 沒有 DTrace(名字),但現在有了 DTrace(功能)

擴展閱讀:動態追蹤技術

更多精彩內容掃碼關注公衆號:RiboseYim's Blog 微信公衆號

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