向Linux內核提交代碼是否需要很高的水平?
如果向Linux內核上游開發社區提交代碼是否需要很高的水平?應該從什麼做起?是不是審核非常嚴格。
你可以看看這個 patch ,233333https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/?qt=authorq=LQYMGT
並不需要. 我水平就很差.我只是個業餘程序員, 主業是獵頭. 當我還是個實習生的時候就修復了內核里用efi的nvram做pstore後端時的bug. 後來我及時換了方向, 就沒再更多的涉獵內核相關的東西.
不過也有收穫, 就是linux-efi的maintainer Matt Fleming主動在linkedin上面加我然後給我一些技能+1了. (然而他跳過了我最擅長的"賣萌"技能是要鬧哪樣啊!)
更何況, 你可以從提交注釋/文檔的修正做起. 我的第一個patch就是修復efi nvram相關注釋.不完全需要,不管能力大小,都能為內核做貢獻。
有時候bug的fix,就是一行。譬如,我最近的一個fix。
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index 52f2645..9b88413 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -461,7 +461,7 @@ static void clusterip_tg_destroy(const struct xt_tgdtor_param *par)
clusterip_config_put(cipinfo-&>config);
- nf_ct_netns_get(par-&>net, par-&>family);
+ nf_ct_netns_put(par-&>net, par-&>family);
}
這個commit,修復了一個引用計數泄漏。改動很簡單,但不改的後果也很嚴重。。。。
初生牛犢不怕虎,啥都不用怕,發現問題就思考,就想辦法,然後了解Linux社區的運作模式,檢索相關問題是否已經在新的內核裡頭解決了,或者相應郵件列表是否已經有patch在排隊,或者剛開始,更簡單點,直接扔patch到合適的郵件列表。
好吧,重點來了,到底如何貢獻,是有流程的,看看我幾年前寫的幻燈:
1,如何往官方Linux貢獻代碼
http://www.tinylab.org/contribute-source-code-to-linux-mainline/2,git得用熟了,另外一個幻燈
http://www.tinylab.org/git-usage-hello-the-git-world/最新的一篇:給 Linus 扔個 patch 吧,
http://tinylab.org/upstream-patches-to-linux-mainline/我補充個和 @LQYMGT 相似的例子,提交者是位 4 歲小女孩,大概是迄今最年輕的內核貢獻者了:
kernel/git/torvalds/linux.git所以說不需要,但是需要能夠發現問題所在,當然有時候能不能提交也要看你的起跑線啦。Documentation: fix formatting to make "s" happy
"That letter [the last s] is sad because all the othershave those things [=] below them and it does not."
This patch fixes the tragedy so all the letters can be happy again. Signed-off-by: Maisa Roponen &[The author being 4 years old needed some assistance]Signed-off-by: Tero Roponen & Signed-off-by: Jonathan Corbet &
並不需要~跟旁邊的maintainor搞好關係~ 就很容易啦, 一般的改動也就幾行代碼,不太需要什麼高深的技術
推薦閱讀:
※如何學習及利用開源代碼?
※為什麼除了 Microsoft 以外的開發者都用 Linux / Unix 內核而不像 Microsoft 一樣自行開發內核?
※RHCE(Red Hat Certified Engineer)紅帽認證工程師在面試的時候作用有多大?
※為什麼許多常見軟體有 Windows 和 OS X 版,卻沒有 Linux 版?