核維護與發(fā)布流程指南:從 Roadmap 規(guī)劃到 Syscall Driver 穩(wěn)定化)
操作系統(tǒng)嵌入式嵌入式OS【免費下載鏈接】tockA secure embedded operating system for microcontrollers項目地址https://gitcode.com/gh_mirrors/to/tock點擊查看免費下載導讀本文基于 doc/Maintenance.md 梳理 Tock面向微控制器的安全嵌入式操作系統(tǒng)核心工作組Core Working Group的項目維護機制涵蓋長期路線圖規(guī)劃、社區(qū)教育與推廣、里程碑驅(qū)動的發(fā)布策略含分支、標簽與版本號管理細則以及系統(tǒng)調(diào)用驅(qū)動Syscall Driver的穩(wěn)定化流程。讀完本文你將能夠理解 Tock 從「規(guī)劃—開發(fā)—測試—發(fā)布—下一個版本迭代」的完整閉環(huán)掌握release-blocker標簽、release/$major.$minor分支、annotated tag 與KERNEL_*_VERSION常量的具體用法并了解如何推動一個系統(tǒng)調(diào)用驅(qū)動走向「穩(wěn)定」狀態(tài)。一、誰來維護 Tock核心工作組的角色Tock 的維護工作主要由 核心工作組core working group 負責。根據(jù)其章程Adopted 3/31/2020Amended 3/01/2024核心工作組的職責包括管理并監(jiān)督 Tock 的代碼、文檔、測試與發(fā)布定義并傳達項目總體目標與方向?qū)⒔M件與子項目的責任下放給各工作小組并確保其擁有完成任務所需的人力和資源協(xié)調(diào)跨多個工作小組的決策包括代碼、文檔、測試和發(fā)布促進各工作小組之間的溝通與共識。核心工作組成員是 Tock 倉庫中擁有提交PR 合并權限的人中的一部分代表項目的主要視角與核心議題。成員加入需由現(xiàn)有成員提名并通過修改 doc/wg/core/README.md 的 Pull Request 完成。工作組每周召開電話會議并在會議后一周內(nèi)發(fā)布詳細的會議記錄作為對外溝通渠道。路線圖與特性規(guī)劃Roadmap and Feature PlanningTock 的重大長期規(guī)劃主要在周期性舉辦的Tock World研討會上完成——核心工作組成員和其他利益相關者齊聚一堂討論 Tock 新特性的設計與項目總體目標頻率大約為每年一次。除此之外日常的規(guī)劃工作則發(fā)生在每周的核心工作組電話會議上。推廣與教育Outreach and Education作為一個開源項目Tock 核心工作組還會定期在學術與專業(yè)會議期間舉辦交互式教程tutorials為感興趣的開發(fā)者提供親手使用 Tock 的實戰(zhàn)機會。此外項目還維護了一本包含多種 Tock 特性自助教程的在線書籍book.tockos.org作為持續(xù)性的學習資料。二、Tock 發(fā)布策略里程碑驅(qū)動而非時間驅(qū)動Tock 的發(fā)布采用**里程碑驅(qū)動milestone-based**策略大致預期每3–12 個月發(fā)布一個新版本。其核心流程是在發(fā)布之前將一批 issue 打上release-blocker標簽當計劃納入本次發(fā)布的所有release-blockerissue 全部關閉后創(chuàng)建新的發(fā)布分支在發(fā)布分支上進行測試與驗證分支穩(wěn)定后打上發(fā)布標簽tag發(fā)布后分支不刪除后續(xù)修復繼續(xù)合入該分支用于打補丁版本patch release。關于release-blocker有一個重要的細節(jié)針對下一個主版本major version的 release blocker 不必阻塞小版本minor version的發(fā)布。也就是說release-blocker的生效范圍是按發(fā)布版本類別區(qū)分的。歷史背景Tock 早期曾采用時間驅(qū)動的發(fā)布策略目標每兩個月發(fā)布一次初衷是讓用戶更容易安裝和追蹤 Tock 的變化。但維持這一節(jié)奏的維護開銷過大且經(jīng)常與發(fā)布節(jié)點上正在開發(fā)中的重大特性沖突因此后來轉(zhuǎn)向了里程碑驅(qū)動策略。發(fā)布分支Release Branches一旦所有 release-blocker issue 關閉即創(chuàng)建新的發(fā)布分支命名格式為release/$major.$minor例如release/1.4。該分支專用于即將發(fā)布版本的測試與驗證。分支在發(fā)布后不會被刪除后續(xù)修復會持續(xù)合并進該分支并用于標記新的補丁版本。發(fā)布標簽Release Tags發(fā)布測試通過后打上發(fā)布標簽。Tock 要求發(fā)布標簽必須是annotated tag帶注釋的標簽而不是 GitHub Release 默認創(chuàng)建的 lightweight taggit tag -a release-$major.$minor.$patch -m Release notes...標簽名稱格式為release-$major.$minor.$patch某個 minor 版本的首個發(fā)布patch 號取0標簽應包含與對應 GitHub Release 相同的發(fā)布說明release notes使用git tag -a創(chuàng)建的 annotated tag 會被 Git 視為發(fā)布質(zhì)量標簽例如git describe可以識別。三、發(fā)布任務全流程Release Tasks3.1 發(fā)布前Before the release發(fā)布前的準備工作包括決定本次發(fā)布應納入哪些特性在相關 issue 和 Pull Request 上標記release-blocker標簽開啟一個標題為Release 的追蹤 issue其中包含本次發(fā)布的目標列表用于測試每塊開發(fā)板board的模板清單checklist供每位核心工作組成員簽核sign-off的清單持續(xù)處理帶有release-blocker標簽的 issue 和 PR直至全部關閉。3.2 發(fā)布測試Release testing發(fā)布測試由核心工作組成員和各開發(fā)板維護者共同執(zhí)行。測試在分支出來的發(fā)布分支上進行而不是在master上。測試的具體操作流程如下選擇一塊要測試的開發(fā)板從上一次發(fā)布的追蹤 issue 中復制該開發(fā)板的測試清單并取消所有勾選將復制的清單發(fā)布到新版本的追蹤 issue 中——這表示你認領了該開發(fā)板的測試工作增加本次發(fā)布你希望額外運行的測試。例如如果該開發(fā)板自上次發(fā)布以來新增了 capsule可相應地為新 capsule 添加測試運行測試每完成一項即在清單中勾選。若測試失敗編輯你在 issue 中的評論將該測試項標記為X表示失敗并附上失敗原因的說明對所有失敗的測試要么提交修復 PR要么開啟描述該失敗的 issue 尋求幫助。Tock 刻意不在倉庫中維護固定的測試列表而是采用「上一輪該板卡運行過的全部測試 維護者本輪新增的測試」的方式讓測試覆蓋隨板卡功能演進自然增長。如果在測試過程中發(fā)現(xiàn) bug 且需要大量修改可以再打**發(fā)布候選release candidate**標簽。是否需要對所有板卡重新測試由核心工作組決定。3.3 打發(fā)布標簽Tagging a release當以下條件全部滿足時即可打發(fā)布標簽所有板卡的測試全部通過更新了 CHANGELOG.md該文件按版本記錄每個發(fā)布的新特性、修復與兼容性說明例如「New in 2.2」章節(jié)記錄了約 3900 個 commit、840 個 PR 以及向后兼容性承諾將 kernel/src/lib.rs 中的KERNEL_PRERELEASE_VERSION設置為0表示這是正式發(fā)布版本更新根目錄 Cargo.toml 中的版本號。3.4 啟動下一個版本Starting the next release在分支發(fā)布之后立即開始下一輪迭代操作如下在master分支上遞增 minor 版本號并將 patch 版本號清零在根目錄 Cargo.toml 中把版本設置為新版本-dev例如當前倉庫中的version 0.2.4-dev在 kernel/src/lib.rs 中更新KERNEL_MAJOR_VERSION、KERNEL_MINOR_VERSION、KERNEL_PATCH_VERSION并將KERNEL_PRERELEASE_VERSION設為1。版本號在源碼中的落地Kernel Attributes版本信息不僅僅是文檔約定它被真實編譯進內(nèi)核二進制。在 kernel/src/lib.rs 中KERNEL_MAJOR_VERSION、KERNEL_MINOR_VERSION、KERNEL_PATCH_VERSION、KERNEL_PRERELEASE_VERSION四個常量當前值分別為2、4、0、1即當前處于 2.4.0 的預發(fā)布開發(fā)階段這四個常量被組裝進TockAttributesKernelVersion結構體并通過#[cfg_attr(target_os none, unsafe(link_section .tock.attr.kernel_version))]放入鏈接腳本指定的.tock.attr.kernel_version段該結構體遵循 Tock Kernel Attributes 格式tlv_type: 0x0103tlv_len: 8供引導加載程序、工具鏈與應用程序校驗內(nèi)核版本與自身應用的兼容性。從源碼可以看出KERNEL_PRERELEASE_VERSION為0表示正式發(fā)布非0表示開發(fā)版本應用或工具還可以利用它依賴尚未進入任何發(fā)布版本的內(nèi)核特性。四、穩(wěn)定化一個 Syscall DriverStabilizing a Syscall Driver4.1 穩(wěn)定化的含義與保證范圍Tock 維護一份**已穩(wěn)定系統(tǒng)調(diào)用驅(qū)動stabilized syscall drivers**清單這些驅(qū)動實現(xiàn)SyscallDrivertrait通常位于 capsules 中。穩(wěn)定化的核心承諾是在相同主版本號major version的后續(xù)內(nèi)核版本中Tock 保證不會破壞這些已穩(wěn)定驅(qū)動的接口。這意味著使用某個已穩(wěn)定系統(tǒng)調(diào)用驅(qū)動的應用程序在相同主版本的內(nèi)核上可以繼續(xù)正常工作。同時Tock 并不禁止在同一主版本內(nèi)擴展已穩(wěn)定接口——允許添加新功能或修復 bug只要不破壞向后兼容性。需要特別注意的是該穩(wěn)定性保證獨立于系統(tǒng)調(diào)用接口即command、allow、schedule等 ABI 本身的穩(wěn)定性兩者是不同層面的承諾。4.2 穩(wěn)定化流程Syscall Driver Stabilization Process一個驅(qū)動由其driver number唯一標識的穩(wěn)定化遵循以下流程文檔完備該驅(qū)動必須在 doc/syscalls 目錄下?lián)碛型暾慕涌谖臋n如 00001_console.md、00000_alarm.md 等提出穩(wěn)定化 PRTock 開發(fā)者通過創(chuàng)建 Pull Request 提出將某個特定驅(qū)動以其 driver number 和上游 Tock 倉庫中的源碼標識穩(wěn)定化PR 需要把該驅(qū)動移入capsules/corecrate并在 doc/syscalls/README.md 的穩(wěn)定化列中標上 ?表示待觀察P-Significant 評審穩(wěn)定化 PR 始終被標記為P-Significant這要求核心工作組支持該穩(wěn)定化四個月觀察期該驅(qū)動的接口必須在四個月內(nèi)保持不變。這段時間可以從穩(wěn)定化流程開始之前的某個時間點算起變更即重置如果觀察期內(nèi)接口發(fā)生變更等待期重新開始計算。驅(qū)動在此期間還必須經(jīng)過合理的測試標記穩(wěn)定觀察期結束后在下一次 Tock 主版本或小版本發(fā)布時將 doc/syscalls/README.md 穩(wěn)定化列中的 ? 更新為該 Tock 發(fā)布版本號即完成穩(wěn)定化標記。4.3 穩(wěn)定化狀態(tài)的倉庫證據(jù)doc/syscalls/README.md 是穩(wěn)定化狀態(tài)的權威記錄其中每個驅(qū)動表格都帶有一列穩(wěn)定性標記列該文件頭部注釋說明 2.0 列表示該驅(qū)動是否已在 Tock 2.0 發(fā)布中穩(wěn)定化? 表示穩(wěn)定。以當前倉庫為例已穩(wěn)定化的驅(qū)動包括2.0Driver Number驅(qū)動說明?0x00000Alarm用戶態(tài)定時器?0x00001ConsoleUART 控制臺?0x00002LED控制板載 LED?0x00003Button讀取按鍵中斷?0x00005ADC模數(shù)轉(zhuǎn)換采樣?0x60000Ambient Temp.環(huán)境溫度?0x60001Humidity濕度傳感器?0x60002Luminance環(huán)境光傳感器而未穩(wěn)定化的驅(qū)動如 0x00004 GPIO、0x00010 PWM、0x20000 UART 等在該列中留空等待后續(xù)版本按上述流程逐步推進。被穩(wěn)定化的驅(qū)動會進入capsules/corecrate。例如 Console 驅(qū)動的SyscallDriver實現(xiàn)位于 capsules/core/src/console.rs其配套的接口文檔為 doc/syscalls/00001_console.md。這種「文檔 源碼 穩(wěn)定化標記」三位一體的結構保證了穩(wěn)定化承諾既可被審計文檔與標記可追蹤又可被實現(xiàn)源碼可驗證。五、維護者的日常工作與協(xié)作機制除發(fā)布與穩(wěn)定化外核心工作組的日常維護還包括代碼評審核心組成員需要按比例評審新 Pull Request確保代碼風格與結構的一致性可參考 doc/CodeReview.md 與 doc/Style.md測試參與成員需在發(fā)布前參與 Tock 的測試設計決策對重大設計變更提供意見與輸入文檔與工具鏈項目通過 doc/CodeGoals.md、doc/SecurityProtocol.md 等文檔約定長期目標與安全流程并通過 tools/ 下的 CI、license-checker、qemu-runner 等工具鏈支撐持續(xù)集成與質(zhì)量保障。總結Tock 的維護體系可以概括為三條主線規(guī)劃通過年度 Tock World 研討會與每周核心工作組會議確定長期方向發(fā)布以release-blocker驅(qū)動的里程碑策略配合release/$major.$minor分支、annotated tag 和「KERNEL 版本常量 Cargo.toml 版本 CHANGELOG」三處同步更新的機制形成可重復、可審計的發(fā)布閉環(huán)穩(wěn)定化以「完整文檔 四個月無變更觀察期 P-Significant評審 版本號標記」流程為用戶態(tài)應用提供同主版本內(nèi)的接口兼容保證。對于想要參與 Tock 維護的開發(fā)者最實際的切入點有兩個一是認領某塊開發(fā)板的發(fā)布測試復制上一輪清單并逐項驗證二是通過提交穩(wěn)定化 PR 推動某個尚未穩(wěn)定的系統(tǒng)調(diào)用驅(qū)動如 GPIO、UART進入capsules/core并完成四個月觀察期。這兩條路徑都完全基于本文所描述的、由 doc/Maintenance.md 定義并在倉庫源碼中落地的流程。贊分享操作系統(tǒng)嵌入式嵌入式OS【免費下載鏈接】tockA secure embedded operating system for microcontrollers項目地址https://gitcode.com/gh_mirrors/to/tock點擊查看免費下載相關推薦Sunshine 穩(wěn)定版發(fā)布全流程從自動 Pre-release 到多源發(fā)布的維護者操作指南Sunshine 穩(wěn)定版發(fā)布全流程從自動 Pre release 到多源發(fā)布的維護者操作指南 Sunshine 的發(fā)布體系采用預發(fā)布全自動 穩(wěn)定版人工確音視頻后端UVR Ultimate Vocal Remover 人聲分離教程5 分鐘做出 KTV 伴奏UVR Ultimate Vocal Remover 人聲分離教程5 分鐘做出 KTV 伴奏 ? 翻唱缺伴奏、播客想去 BGM、KTV 想提取純?nèi)寺昒l音頻處理人工智能Jasmine 版本發(fā)布全流程指南從 SemVer 規(guī)劃到 npm 發(fā)布與 GitHub ReleaseJasmine 版本發(fā)布全流程指南從 SemVer 規(guī)劃到 npm 發(fā)布與 GitHub Release 本篇指南面向 Jasmine 的維護者Core M測試質(zhì)量保障上一篇cpulimit安裝與配置5分鐘快速部署完整教程 下一篇72小時限時開源SpringBoot3Vue3全棧開發(fā)腳手架從0到1搭建企業(yè)級應用架構創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考