AOSP的master/main分支毫無意義,AOSP很早就是這樣了,或者說一直就是如此,任何試圖下載或者編譯其主分支代碼的人不出半個小時就能得出這個結論。
觀察AOSP的代碼歷史就可以發現,一些倉庫的主分支已經無法作為開發分支/優先提交的分支了。
以Bionic libc倉庫為例
一個小功能要半個月才能合併,即使都是Google員工,效率低成這樣,顯然是無法繼續維持了。一個月提交20行代碼,這績效怎麼算呢。
此外,AOSP不是monorepo,而是用的repo工具管理的上百個倉庫。repo工具需要manifest倉庫定義各個子倉庫的分支或者tag,然後才能checkout一套源碼出來。
但是,或許由於管理的問題,或許由於授權的問題,AOSP從來不公開未發版版本的manifest,也就是說,正在beta測試的系統,只有Google和GMS合作夥伴能拿到原始程式碼,而其他沒有許可權的開發者,只能看到主分支上殘缺的代碼,以及處於GPL要求必須開源的代碼。
如下圖所示,只有發版的android 15有能用的分支,android 15 beta時期和現在的android 16 beta的分支都帶著gpl的標記,裡面也沒有完整的AOSP系統
但是這並非什麼秘密,10年前就是如此,只是10年前國內的安卓廠商根本不參加beta計劃(好像Android 8之後Google才聯合國內廠商推出beta系統),不在beta期間推出Android beta系統,對Android大版本更新也不上心。而lineageos等第三方基於AOSP開發的類原生系統也是在Google官方系統更新幾周後才能等到AOSP發佈的開源分支,然後進行二次開發。
即使是發版的分支,Google的功能更新(比如最近Android的QPR更新)或者安全更新,也是提前發佈給GMS合作夥伴,然後才會公開。非GMS合作夥伴晚至少一個月才能從AOSP看到安全更新,這對於商業用途是完全不可接受的。
更令人疑惑的是,任何一個AOSP的分支,其代碼倉庫的歷史都是幾乎不可讀的,各個分支之間也沒有什麼依賴關係。機器人自動的merge/cherry-pick導致AOSP的歷史不像典型git倉庫的樹狀歷史,而是更接近一種織物,一個commit在各個分支之間串來串去。
在這種情況下,不開放主分支,甚至於不保留commit歷史都無所謂了,反正AOSP的commit歷史已經接近於不可讀了。
這樣的軟體,自然仍算是開源軟體,因為協定是Apache 2.0,是開源協定。
我建議大家都閱讀一下《大教堂與市集》(The Cathedral and the Bazaar)這本摺頁冊,簡單來說,這本書討論了兩張開源軟體的開發模式
這本書直接推動了網景開源其瀏覽器並啟動Mozilla專案,而絕大多數人熟悉的開源項目實際上都是以Mozilla的模式開發的,因為不可能像Linux內核一樣幾乎沒有公司主導,且完全去中心化,只以Maintainer作為管理者;也很難採用教堂模型這種在大家看來極不透明的方式進行。但儘管如此,教堂模型仍屬於開源軟體,只是大家可能不信任這樣的模式了。
當然這些問題都是AOSP這個專案自己的管理問題,其他開源項目並沒有這樣的問題。我們可以看一下其他的巨型開源專案(代碼量大於5千萬行)的狀況。
這是Google Chrome,目前最新版是M134
這是我在Gentoo Linux上的chromium,同樣的M134
這個Chromium運行在musl libc之上,是Google不支援的平臺。但是我可以移植到該平臺,這就是開源的意義。
Chromium也會tag測試版(beta, 目前是M135)和開發版(dev, 目前是M136)
checkout任何一個tag,都可以編譯出該版本的瀏覽器,包括beta和dev版。
以Chromium的下游Electron為例,Electron 35使用M134,但已經可以更新到Chrome沒有發版的134.0.6998.179補丁版本,而Electron 36已經可以使用仍處於dev通道的M136版本。Electron的測試版也會定期發版,並通過GitHub release或者npm直接下載使用。
Firefox從2011年開始學習Chromium的發版策略,快速飆版本號,不過由於MPL屬於CopyLeft協定,定製Firefox的產品並不多,Thunderbird、Tor瀏覽器屬於少數這樣的產品。但Mozilla計劃20多年以來,都是一小波被雇傭的開發者專職開發,外加工作可以使用Bugzilla等設施貢獻代碼。
再看Webkit,他們只給正式版打tag,比如620.2.4是Safari 18.3對應的版本,但任何分支都可以編譯,並在macOS或者iOS模擬器上讓Safari運行自己編譯的內核。此外webkit-gtk也為Linux桌面提供支援。
然後看OpenHarmony,正式版是5.0.3.135
這個版本是3月20日推送的
對應的tag要更早,在2月26日
OpenHarmony 5.0.3系列的下一個版本很有可能是5.1.0系列,目前最新版是5.1.0.101
OpenHarmony會定期給各個分支增加版本號,大家可以提前通過OpenHarmony的代碼瞭解到未來的功能,以及開發計畫,例如鴻蒙PC版的功能。