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 <tomas.jedlicka@oracle.com>
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(功能)
擴展閱讀:動態追蹤技術
- 操作系統原理 | How Linux Works(一):How the Linux Kernel Boots
- 操作系統原理 | How Linux Works(二):User Space & RAM
- 操作系統原理 | How Linux Works(三):Memory
- 動態追蹤技術(一):DTrace 導論
- 動態追蹤技術(二):strace+gdb 溯源 Nginx 內存溢出異常
- 動態追蹤技術(三):Tracing Your Kernel Function!
- 動態追蹤技術(四):基于 Linux bcc/BPF 實現 Go 程序動態追蹤
- 動態追蹤技術(五):Welcome DTrace for Linux