GCD 的用戶空間 (userspace) 程式庫元件,libdispatch,透過 Apache Software License 授權提供下載。此舉有助於在其他平台運用這項技術。Apple 在核心層級的 GCD 最佳化程式碼也已經作為 XNU 原始碼樹的一部份公開出來。
GCD 針對全系統提供了高效率的執行緒集區 (threadpool),部份的高階程式語言建構則可以為應用軟體開發者簡化並行處理。
對於 Snow Leopard 與 OS X 開發者,GCD 儘管是一大優點,卻無法運用在其他平台上。藉由 GCD API 的開放源碼,Apple 希望如 Linux 等其他作業系統可以採用這套技術,擴大該技術的普及率。
可以作為 GCD 借鏡的,是 Apple 的 Safari 瀏覽器底層技術 WebKit,後來被 Google 採納使用於 Chrome 瀏覽器。WebKit 的成功,讓 Apple 看見開放源碼帶來的好處,該公司可獲益於開放源碼社群不斷的程式碼改進。
儘管 GCD 如今公開釋出,在廣泛採用於其他平台前,仍然存在一些技術與授權上的障礙。例如,高階的 GCD API 使用了由 Apple 開發的 C 語言延伸,blocks。這套技術目前仍然未被上游的 GNU Compiler Collection (GCC) 主線所採納,意味著必須透過 Clang 與 LLVM 才能在 Linux 上使用。雖然似乎有辦法在沒有 blocks 支援上使用 GCD,但其實用程度不高。Apple 這次提供了 blocks 數種實作的原始碼,包括針對 LLVM Clang 編譯器與該公司的 GCC 分支。
Apple 的 blocks 基本上近似於 closures,是可以存取區域變數的匿名函式。這個概念被 Ruby 程式開發者所採納,也可見於若干函數型程式語言 (functional programming languages) 之中。這項語言功能在許多情況下有助簡化程式碼,不僅限於並行處理。
組成 GCD 的三大元件,如今公開給外界使用、改進,其中包括:用戶空間的 libdispatch,其中包含的 API 可以讓開發者呼叫,將程式碼 blocks 排程到佇列中。xnu 是執行 OS X 的核心,在 Apple 尚未購併 NeXT 前,最初是由 NEXTSTEP 所開發。xnu 的意思是 “X is Not Unix”。由於 xnu 包含了來自 FreeBSD 的程式碼,從一開始就是開放源碼。
最後則是 llvm,也就是設計用來最終取代 gcc 的 Low Level Virtual Machine 編譯器技術。儘管技術上並非 GCD 的必要元件,但 llvm 支援了關鍵的 blocks。
Apple 的 blocks 實作採用的是 MIT 授權,是一套與 GPL 相容的授權方案,意味在納入上游 GCC 時不會有授權上的障礙。不過,libdispatch 本身採用的是 Apache 授權,該授權與 GPLv2 授權不相容。Apache 授權與 GPL 的相容問題在 GPL 第三版已獲得解決。
如此一來,libdispatch 將無法被 GPLv2 的應用軟體使用。雖然許多 Linux 應用軟體採用 GPLv2 或之後的授權,代表可以使用第 2 或第 3 版的授權,仍有部份應用軟體僅採用 GPLv2 而無法與 Apache 授權的程式碼混合使用。這一點可能在 Linux 開發者之間構成對 GCD 的疑慮。
相關網址:
1.Apple 將 Grand Central Dispatch 開放源碼
2.Apple 公開 Grand Central; 阻礙 Linux 採用的挑戰