Debian 的軟體套件原始碼通常包含幾個檔案,分別是 dsc, diff.gz 與 orig.tar.gz.

.dsc 是一個文字檔,包含軟體的基本資訊、如版本、維護者資訊與原始碼檔名與驗證碼 (checksums) 資訊 。.diff.gz 是壓縮過後的差異檔,由於軟體套件都必須針對不同的套件系統進行調整,以便符合套件系統的規矩。而 Debian 的方式是保留由上游所發行的原始碼壓縮檔,也就是 .orig.tar.gz 檔案,並將所有的修改另外儲存於 .diff.gz 檔,包含 Debian 包裝軟體時特有的 debian/* 檔案。

於是,對於使用者/原開發者而言,可以清楚的分辨哪些碼是被 Debian 軟體套件維護者所修改,在除錯或維護上都可以比較清楚的區分。若想了解 Debian 包裝軟體的細節不妨參考我的 Debianziation HOWTO

至於所有原生套件與非原生的套件的差別,則在於是否有 .diff 檔案。若你所包裝的軟體原始碼中本來就含有所有 Debian 所需要的 debian/rules, debian/* 檔案,你在產生 .deb 安裝檔時,套件包裝軟體就不會/無法生成差異檔,而只會生成 .tar.gz 檔案。

通常包裝成原生軟體套件 (Native Package) 的狀況是維護者手誤所造成,大約是忘記將原始檔名改成正確的 .orig.tar.gz 名稱。但有些時候,是軟體套件維護者刻意製成。但是除非該套件是針對 Debian 所開發,不可能被移植到其他套件系統上,否則不應該包裝成原生套件。

有些開發者原本就使用 Debian 作為開發平台,偶爾為了方便也會直接在發行的壓縮檔案中置入 debian/* 檔案。但是這是不應該的,Debian Mentors FAQ 裡面有稍加解釋,事實上在原始檔壓縮檔中放入 debian/* 檔案,很容易造成誤解與困擾,特別是需要追蹤修改紀錄的狀況。另外還有如下的原因

  1. 其他套件系統沒有理由想要、需要 Debian 的特定東西。
  2. 所有為 Debian 所作的的修改,都會造成一次版本提交。結果莫名的影響其他套件系統都需要更新升級。
  3. 不只是 Debian 使用 debian/,其他延伸套件系統可能也需要修改其中檔案才能運作。否則要則他們必須修改原本的原始碼壓縮檔,或者以一個 patch 來修正你的 debian/ 檔案。
  4. 當有安全問題或其他因素需要作 NMUs 時,這個 debian 目錄會造成其他人難以維護追蹤的困擾。

與 Debian Developer 討論之得。