New website: https://rhythm16.github.io
一路的故事是滿意外的,有天跟同學吃飯聊到了我讀的32bit x86架構的memory reference,又再一次提醒了我我對於64bit一無所知的事實。回家手癢google了"x86_64 memory reference",前幾個搜尋結果是linux kernel的documentation,瀏覽了一下竟然發現有句話讀起來怪怪的:
"16M TB" might look weird at first sight, but it's an easier to visualize size notation than "16 EB", which..(後省略)
"easier"後面少了一個"way"啊! 這在平常可能不算什麼,就少個字,也不至於影響閱讀,但我馬上想到了jserv教授之前在facebook發文提到了一個四歲小孩在爸爸工作時看到了kernel排版少了一個'=',爸爸就幫忙發了一個patch,也被接受了,說明這種重要的大專案連排版這種小錯也是要修正的。
我之前就聽過linux kernel mailing list跟貢獻給linux kernel的一些規則,不過一直沒有深入了解,剛好趁著找到文件缺漏的機會可以學習一下,畢竟菜雞如我就算想主動貢獻這類開源專案也會因為不知道要寫/改什麼code而無法參與。
一開始不外乎就是開始各種google 我的流程幾乎完全照著這個
還有以下這幾個也稍微讀了一遍:
連結裡頭跟網路上其他資料的流程不一定100%吻合,我認為是因為有些步驟被一些腳本自動化了,所以做法有新舊差異
這段非常大略的描述linux kernel社群運作方式,很多細節省略。我的經驗與所知非常非常的少,很有可能有錯誤、缺漏或容易產生誤會的地方
Linux版本號意義可以參考這篇。 Linux kernel開發社群的溝通方式是plain old email,要找人討論、聯絡維護者就是寄信 (github 上面的linux kernel只是一個mirror,即時顯示最新狀態)。社群有一個主要的mailing list,叫做Linux Kernel Mailing List (LKML),就是個email廣播空間,可以進行討論,或是宣告事項。寄信到那個mailing list,所有有訂閱的人都會收到那封email。 所以對,LKML每天都有好幾百甚至上千封email,訂閱方式google查就有,訂閱前請三思。只想看看內容可以到這個連結 Linux kernel的大頭是初始作者本人Linus Torvalds,基本上code/文字進到了他本人的git repository,就是"進了linux kernel",但是一般人不會直接寄信給Linus,而是把自己修改的內容寄給Linus下面負責的維護者,並同時Cc LKML,等待自己的patch慢慢送到上游,最後進到Linus的repo。 維護者與維護者的溝通,還有Linus與維護者們的溝通大多不會Cc LKML,他們的工作方式我還沒有深入去查過。
第一步就是弄個source code來:
也可以用git clone
,但下載實在太久了所以我下載tarball
因為是下載壓縮包,所以是還沒有使用git:
接著就進source把少的"way"加上去
commit不加 -m 會自動跳出一個GNU nano讓你編輯commit message,而-s是跳出時自動加入一行Signed-off-by: "name" <email>
的簽名,這是標準發kernel patch要加上的,所以建議使用。-v則是在下方顯示你所做更改的diff訊息,只是幫助撰寫commit message用。
交patch是有標準格式的,如果沒弄好好心的maintainer可能會回信給你提醒你哪裡錯了,如果太誇張我猜他就直接不理你了,以下是格式:
如果有不清楚的就回去看你改的檔案的commit歷史看看之前的人怎麼寫的,以下是我最後的message:
接著生成patch:
這指令與master branch比較,生出.patch檔,會放在root directory 再來用script檢查patch有沒有問題: (光這個檢查的script就快7000行XD)
然後也是用script查看這個patch要給誰:
使用git send-email
來送信,先寄一次給自己測試看看
確認格式都正確沒有跑掉,就可以正式寄給maintainer & LKML了!
git send-email
執行之後會請你確認,然後輸入密碼,寄出
我收件人選擇Jonathan Corbet是因為顯示了他是Documentation的maintainer。