ついにLinuxに初貢献!達成感と学びの記録
引用元:https://news.ycombinator.com/item?id=45490652
Linuxカーネルへの貢献ってマジでやりたいことリストのトップなんだ。特に20年前のノートPCのボタンみたいなニッチな分野。近いうちに絶対やる!記事もすごく良くて、OPのシンプルな文章にやる気が出たよ。今、中古市場でこういうテック製品を探し回ってるんだ :-)
OpenWrt対応だけどビルドターゲットがないWi-Fiルーターを買って、メンテナーにパッチに必要な情報を教えてもらったんだ。指示通りに進めたら新しいビルドターゲットができたよ。後でLED制御のパッチは自分で書いた。すごくやりがいがあって勉強になった経験だったな。僕がサポートを手伝ったルーターでOpenWrt使ってる人を見つけた時は感動したよ。
いいね!いつかやってみたいって思ってたことだよ。サポートされてないルーターって、最近は結構あるしね。
Linuxでハードウェアサポートが必要なデバイスを探すなら、古いスマホやタブレットでモバイルLinuxディストリビューションを試すのが超オススメ!特にpostmarketOSのデバイスページ [1] は不足機能が一目でわかるし、新しいデバイスへのポーティングガイド [2] や、ベンダー提供のLinuxフォークからアップストリームカーネルへのポーティングガイド [3] も充実してるよ。<br/>[1] https://wiki.postmarketos.org/wiki/Devices<br/>[2] https://wiki.postmarketos.org/wiki/Porting_to_a_new_device<br/>[3] https://wiki.postmarketos.org/wiki/Mainlining
postmarketOSで作業したいけど今すぐは無理。でもいつか!Androidフォンでデュアルブートとか、Linuxを簡単に動かせたら最高なのに。ラズパイとかで作ると高いし性能も劣るしね。Androidは世界規模で開発されてるのに、ドライバー不足で動かないのはもったいない。PostMarketOSがもっと評価されてインストールしやすくなれば良いのに。Android内でターミナルをQEMU経由で使うのは問題あったし、VM内のLinuxよりpostmarketOS上のWaydroidの方が良いけど、インストールは大変。TermuxとかUserLandならAndroidにLinux入れるのが簡単なのにな。<br/>https://www.androidauthority.com/android-linux-terminal-app-…
デュアルブートはできるよ。僕はSDカードスロットがあるデバイスで、AndroidをeMMC、PostmarketOSをSDカードに入れる方法が好きだな。今は古いデバイスでしかやってないけど、メインでもやりたい!でもブートローダーアンロックすると初期化されちゃうし、大事な設定が多すぎて無理なんだ。Androidデバイスの全パーティションをバックアップする方法がないのも変だよね。
libhybrisの上にモバイルLinuxを動かすのもアリだよ。これはプロプライエタリな互換性レイヤーだけど、これを使って新しいデバイスでモバイルLinuxランタイムをサポートさせてる人もいるんだ。
今これに挑戦中なんだけど、予想以上に難しいんだ。カーネル再コンパイルとデバイス再起動が手間だよ。Qualcomm SoCでディスプレイとタッチスクリーンを安定させようとしてる。個人的にはPMOSのWikiは情報不足だと思うな。
ほとんどのノートPCはまだLinuxで完全に動かないから、古いハードウェアを探す必要はないと思うよ。ボタンを直すみたいなシンプルな問題は見つからないかもしれないけどね。
ボタンを直すような簡単な問題なんてないって?Linux使ってるノートPCは、いくつか機能しないボタンがあるのが普通だよ。この問題の広がりを甘く見てるんじゃない?
もし誰かがノートPCでこの問題に取り組みたいなら、WMIから始めるのがいいよ。ここに情報があるよ: https://docs.kernel.org/next/wmi/driver-development-guide.ht…
運がいいね!ThinkPadでも普通に問題あるよ。R60:https://unix.stackexchange.com/questions/475968/thinkpad-vol…
E14 Gen4:https://forum.manjaro.org/t/thinkpad-e14-gen4-special-keys-m…
E14 Gen2:https://unix.stackexchange.com/questions/609942/thinkpad-spe…
T510:https://bbs.archlinux.org/viewtopic.php?id=268269
Fn Volume Control Keys:https://forums.linuxmint.com/viewtopic.php?t=412947
検索すれば、君のThinkPad体験が例外だってわかるはずだよ。
問題の定義が違うのかも。俺は100%動くってのが、メーカーのブロートウェア起動って意味だと思う。Windows機で変なボタン押しちゃうパブロフの犬にならなくて済んで嬉しいよ。
”100%動く=ブロートウェア起動”って、物理ボタンを動かすのにブロートウェアがいるってこと?
“パブロフの犬になってWindows機でボタン押しちゃうのが嬉しい”って、何が言いたいのかマジでわかんないんだけど。
Windowsだとボタンがブロートウェア起動の特殊なトリガーなんだろうね。キー自体に標準化がほぼないのが問題で、モデル間でもバラバラ。Windowsドライバーは、見ただけで泣きたくなるような長いif文で信号を処理してる。だから、完璧なはずのカーネル修正が、1/3のノートPCで効かないなんてこともあるんだ。
”ボタンがブロートウェア起動のトリガー”って言うけど、記事のプレイ/ポーズボタンとかは普通の機能だよ。それがなんでブロートウェアなの?
”キーに標準化がない”って言うけど、実際はかなり標準化されてて、だから主要なキーは動くんだよ。WiFiオフとかキーボード輝度ボタンは標準的じゃないけど、ブロートウェアじゃないし。
”50マイルのif文で大人が泣く”って、そんな大人知らないし。単純な解決策も複雑な解決策も嫌いって何だよ。
”修正が1/3で動かない”って言うけど、デバイスはLinuxでよくサポートされるようになるよ。記事の執筆者みたいに時間かける人がいるからね。
俺のDellノートPCには電卓ボタンがあるんだ。こういうキーはただのマクロだよ。
電卓ボタンは「標準化された」ボタンの一つで、マクロほど複雑じゃないよ!すごく便利だよね。
マジか!calc.exeが隠しコマンドラインウィンドウで実行されてるのかと思ってたわ。
そうそう!OSに「電卓開いて」って伝えるボタンなんだ。調べたら、HIDの「Consumer Control」コードが「Application Launch - Calculator」で0x0C0192とか0x192だった。ASCIIじゃなくてスキャンコードで送られるんだよ。Windowsだとcalc.exeが開くけど、レジストリいじれば別のアプリにも変えられるぜ。
カスタムOSならキーコードは自由にマッピングできるし、BIOSに怪しいものがある心配もない。WindowsのノートPCボタンは、Yahooブラウザバーみたいにブロートウェアと連携するよう作られたりもするんだ。掃除されてないWindows PCに触る機会もあるから、俺は変なキーを押す習慣はつけたくないね。
「掃除されてないWindowsラップトップの前に置かれることもあるから、フットガンを押す習慣はつけたくないね。」そんなにセキュリティに不安なら、Windowsマシンには近づかない方がいいんじゃない?
そのうちドライバーに「車には近づきたくなかった」って言うことになるのを楽しみにしてるよ。
スレッドを間違えて返信しちゃったんじゃないの?
彼らはWindows PCを避けるのは車を避けるくらい難しくて、危険だと言いたいんじゃないかな。もし本気で言ってるなら、もっと技術的じゃない仕事か趣味を見つけるべきだろ。飛行機が怖いなら空軍に入るなよ。
リスク高い活動選ぶ人に言葉があるか知らないけど、俺は死への健全な恐怖が足りないのかもな。早く死ぬとして統計を見れば、車と死の関係を考えるのは理にかなってる。「恐怖と誤解する」のは防衛機制だ。コンピューターセキュリティの状況は、そんな防衛機制を使いたくないことの一つだね。LinuxはWindowsをなくしてないけど、Windowsをなくすための別のアプローチは消した。歩道で俺を轢く電動スクーター並みで、車のリスクを減らしてないよ。
「俺は死への健全な恐怖が足りないのかも。」運転手やスクーターに轢かれること、メディアボタンが人生を変えるソフトを起動することにはすごく健全な恐怖を持ってるみたいだね。君の死への恐怖は健全じゃないかも。人生で多分起こらないことを心配して過ごしてるって意味で、不健全かもしれないぜ。左、右、左、って全部そうだよ。
外部の羅針盤がない状況はグループが危険だと見なすものだ。その恐怖を克服して、まだ克服してない人を軽蔑する。心理学者はそれを逸脱の正常化と呼ぶね。君の航空の例だと民間パイロットは外部の羅針盤を持ってる。最初の成功から左、右、左、って社会的な逸脱プロセスからくる満足感が大きすぎて、全てを支配できるって思い込んでるグループは勘弁だな。
うん、これは俺の(残念ながらまだ遠い)引退後の活動リストの中でも「模型鉄道でいっぱいの地下室」よりかなり上位に入るね。
その意気だよ!笑顔
ちなみに、あまり知られてないハードウェア特有のLinuxカーネルコードを深掘りすると、すごく面白い、一般的な問題が見つかることがあるんだ。例えばdougg3が「Chumby 8」のメインラインカーネルサポートに取り組む記事シリーズで、こんな問題に偶然ぶつかったんだ。
https://www.downtowndougbrown.com/2024/04/why-is-my-cpu-usag……
これは他の多くのマシンにも応用できるよ。
もっとコメントを表示(1)
俺もLLVMで同じことしてるよ。最初は「good first issue」ラベルの課題に絞って、取り組むものを見つけたんだ。レビューに2ヶ月、コードの研究と記述に約1ヶ月かかったけど、昨日やっとマージされたよ。同じ問題にぶつかった人が、1ヶ月じゃなく1時間で解決できるよう記事を書くつもりだ。コンパイラもカーネルみたいにすごく楽しいよ!
https://github.com/llvm/llvm-project/pull/154914
俺が目撃した最高のLinuxカーネルへの貢献は、上司が見つけたADC読み取りに関するマクロの1文字(後に2文字と訂正)修正だった。2週間かけてバグだと確認し、提出したら貢献者ファイルに載ったんだ。彼はあまりプログラミングしないのに、テスト中にバグを見つけたのは最高に面白かったし、彼にとっては大勝利だったね!
https://lkml.iu.edu/2103.2/08109.html
W.、もしこれ読んでたら、君がこのバグを見つけた話、今でも大好きだよ!
それ言っちゃったら、その話は秘密にしちゃダメだよ!
まあ、液体状の微粒子が机じゅうに飛び散った、とだけ言っておこうか。
面白くてよく書かれてるね。共有してくれてありがとう!ニッチなハードウェアのサポートを追加・改善するのは、カーネル開発を始めるのに理想的で、いつか俺も試してみたいと思ってるよ。
プログラマーにとって、Linuxコントリビューターとして名前が載るのは最高の栄誉だと思うね。
小さな貢献でも、シニアエンジニアとのヒューマンシステムで働くコミットメントと、ソフトウェアをより良くしたいという野心を示すものになる。履歴書には常に良い影響を与えるよ。
わかる。Donald KnuthのThe Art of Computer Programmingのエラーを見つけてhexadollarをもらうってのもあるよな。俺はどっちも経験ないけど、自慢とかじゃなくてさ。
この投稿、本当に最高だったよ!俺もLenovoのノートPCの機能修正に挑戦したくなった。Lenovoのドライバーはかなり監視されてるだろうから、しっかり事前調査するつもり。記事をありがとう!
めっちゃクールだった!俺もノートPCで同じ冒険をしたんだ。残念ながらACPIのリバースエンジニアリングで壁にぶつかり、Windows側にログやツールがなく断念。自分のPCでやり遂げた筆者にはマジで尊敬!
キーボードのLEDはリバースエンジニアリングに成功して、ユーザー空間から制御できたよ!カーネル貢献も考えたけど、機能をユーザー空間に置くのが良いって意見を見てやめたんだ。
これ、マジで面白かった!どうやるんだろうってずっと不思議に思ってたんだ。
Linuxのchangelogに自分の名前が載るって最高だろうな!
> Linuxのchangelogに自分の名前が載るのは最高だろうな!
昔、ティーンの頃にksnakeとgeditのパッチがいくつか採用されたことがあるんだ。Linuxのパッチほどじゃないけど、自分が書いたコードが何百万ものPCで動くってのは、マジで最高の気分だったよ。
Debianのvixie-cronへのパッチ[0]が採用されたんだ。これが今の俺の一番の自慢の成果だよ。ちっぽけで、普通ならありえないものだけど、これのおかげで、crondを再起動したりDSTの切り替えを待たずにサーバーのTZを変更でき、ジョブが新しい時間に動くようになったんだ。カーネルへの貢献は、いつかやりたいことリストに入ってるよ。
0: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1019716
おめでとう。俺もカーネルにコミットしたことあるけど、リファクタリングで消えちゃったんだ。
俺も同じだよ。いくつかのゲームで深刻なバグを見つけて、悪用して楽しんで、パッチを書いて送ったんだ。問題は、不安でエイリアス(別名)でやったこと。いくつかのゲームのchangelogに俺のエイリアスが載ってるんだ。『これ俺の貢献だ』って見るのは良いけど、『でも俺の名前じゃないから誰も信じてくれない』ってなる。くそー!:(昔は’ハッシュ関数’と’暗号化’を混同してた頃の話だけどね。
俺もめっちゃ誇りに思うだろうな。良い仕事したね!
ありがとう!本当にそうなんだ!
ブラボー!すごい仕事だね。
これ、ありがとうね。USBデスクトップスピーカーの音量調整が効かなくて、パッチを書こうと思ってたけど、どこから始めればいいか分からなかったんだ。これで分かったよ。
これ、いい記事だね。これからもこの人から素晴らしいブログ投稿がたくさん見られるといいな。記事の下にタイムラインがあって、LWNのリンク付きのエントリに気づいたよ。>2025-05-27: Sasha Levinが僕のパッチ(といくつか他)をバックポートに選定…
https://lwn.net/Articles/1020203/
これはLKMLリンク:
https://lwn.net/ml/all/aBj_SEgFTXfrPVuj@lappy/
このツールの新バージョン(AUTOSEL)はすごく面白そうだね!AUTOSELは現代のLLMと埋め込み技術を活用して、はるかに正確な推奨を提供してくれるんだって。
何年も前から些細な修正を先延ばしにしてたんだ。パッチをフォーマットして送るためのコマンドをリストしてくれてありがとう。まさにこれが僕の作業を妨げてたから、先延ばし癖から抜け出すのに役立つかも。
今までカーネルに関して何もやったことなくて、今から貢献を始めるのはちょっと気が引ける感じなんだ。ソースツリーに行って簡単なタスクを頼んだら、誰かが親切に手伝ってくれるだろうけど、やっぱり圧倒されちゃって避けてきたんだよね。言い訳はやめて、そろそろやるべきだな。ファイルシステムでもっと色々やりたいし、カーネルの理解があればきっと役に立つだろうから。
https://kernelnewbies.org/FAQ/WhereDoIBegin (と、一般的に https://kernelnewbies.org/ )に良いヒントがあるよ…
これは、質の高いオープンソース貢献と公開された実績を持つエンジニアを雇用する最も簡単な方法だよ。Linuxのようなアップストリームプロジェクトにコミットが表示されているかを確認するだけでいいんだ。誰でもコード、レビュー、そしてAUTHORSファイル内の作者のメールを見ることができるから、この貢献やパッチが実際にその変更をコミットした作者からのものであることが確認できる。
これは昔からあるソーシャルプルーフの一種で、時間を大幅に節約し、Leetcodeを不要にするものだね。(Leetcodeは今やLLMで完全にカンニングできちゃうから。)
気を付けて… どんな評価基準もターゲットになっちゃうと、その有用性を失っちゃうんだ。カーネルパッチを取り入れることも、すでに多少この影響を受けているかもしれないけど、もしベイエリアのすべての”なりきり”企業がこれを採用のスクリーニングとして要求し始めたら、LKMLがどうなるか想像してみて!
>気を付けて… どんな評価基準もターゲットになっちゃうと、その有用性を失っちゃうんだ。
でも、これは典型的なSWEの役割に関連する幅広いタスクをテストするんだよ。プログラミングの熟練度、厳格なコードレビューを通じた推論、クリーンなコード、オープンソース、テストとかね。LeetcodeやHackerrankのテストはLLMでカンニングや突破ができちゃうことを考えると、すでにゲーム化されまくってるだけでなく、その役割に関連する何もテストできてないんだ。
>もしベイエリアのすべての”なりきり”企業がこれを採用のスクリーニングとして要求し始めたら、LKMLがどうなるか想像してみて!
それなら、これで時間を節約できるし、Linuxカーネルのような高プロファイルプロジェクトで高品質で機能的なオープンソースの変更を示すのは面接官の役目なんだ。そして基準は意図的に高く設定されているんだよ。”面接カンニング”ソフトがインストールされた何百人もの候補者が、ただコーディング面接をパスするためだけにいると想像してみて。面接官も候補者も損するだけだ。
>それなら、これで時間を節約できるし、Linuxカーネルのような高プロファイルプロジェクトで高品質で機能的なオープンソースの変更を示すのは面接官の役目なんだ。そして基準は意図的に高く設定されているんだよ。
それは、メンテナーの時間をあなたの一次面接に使うっていう犠牲の上になりたつんだよ。
https://news.ycombinator.com/item?id=24643894
他の人も警告してたけど、npmエコシステムが怖い例だよね。質の低いnpmパッケージを大量に作って、既存の有名パッケージに便乗させて、自分の”広くインストールされたパッケージの作者”っていう実績を作ってるらしいよ。
めっちゃいい記事だった!Linuxカーネルへの貢献は怖いと思ってたけど、これを読んで自信とインスピレーションが湧いたよ。ハードウェアの問題をデバッグするガイドにもなるし、作者がメンテナーの仕事の重要性を理解してパッチ提出に緊張したってところが特にいいね。
へぇ〜!Linuxエコシステムのことあんまり知らなかったから、リーナス・トーバルズが今も日々のレビューやリリース作業に深く関わってるって知って驚いたよ。
もっとコメントを表示(2)
素晴らしい記事だったよ。カーネルへの初貢献おめでとう!
めちゃくちゃ素敵な記事で、すごくよく書けてた!投稿してくれてありがとうね。
えっ…コスキブオリ?そりゃあ彼のLinuxパッチがすぐ採用されるわけだ、フィンランド人贔屓だろ!貧乏なエストニア人だったら…って冗談だよ(笑)。Linuxパッチを成功させるまでの話、めちゃくちゃクールだった!俺もEmacsのパッチが通った時、似たような興奮があったな。
パッチをレビューしたサブシステムのメンテナーもフィンランド人だって考えたら、このジョーク、さらに面白いね!
ナイス、Torille!俺も昔、初めてのカーネルパッチを出したことあるよ。MacBook Pro 2010のGeForce 320MでOpenGLアプリがメモリ不足でクラッシュするから、nouveau drmコードを調べて間違いを見つけたんだ。提出には苦労したけど、採用された時は嬉しかったなぁ。当時はパッチのチェック用スクリプトなんて知らなかったけど、これからのためになりそう!
君のウェブサイトのデザイン、すごく気に入ったよ!デザインとか設定についてどこかにまとめてる?
ありがとう!まだ文書化してないけど、君で2人目だから多分やるべきだね。このサイトはZola[0]でビルドされてて、Radion[1]テーマをちょっといじって使ってるよ。
[0]: https://www.getzola.org/
[1]: https://github.com/micahkepe/radion
おめでとう!フィンランド好きで住んでる俺もLinuxカーネルに貢献するのが夢なんだ。
コミットに使ったEメールとGitHubプロフィールのEメールは同じ?
同じならGitHubミラーのコントリビューターリストと君のプロフィールに表示されるはずだけど、ちょっと見た感じだと見当たらないみたい。
なんでHDDをSSDにアップグレードしないんだろう?古いハードウェアでも、よくHDDがボトルネックになることってあるよね。
PATAのSSDで信頼できる高品質なものが見つかるまで、アップグレードは保留にしたかったんだ。
まだ調べてないから、何か良い情報があったら教えてほしい!
もし本当にPATAなら、PATA-to-CFアダプターを使って、速くて大きいCFカードを手に入れるのが良いんじゃないかな。
カーネル開発ってずっと謎だったから、このブログ投稿でプロセスを解説してくれて本当に感謝してるよ。
開発中にAIツールとか使ってみた?
これ、俺のバケットリストにも入ってるんだ。
C言語が全く分からないから、最近のRustの進展には大喜びしてるよ。
Rustと比べたら、C言語はかなり簡単だよ。
素晴らしい記事で、すごく分かりやすかったよ。
関連する追加情報も詳しく書いてくれて、感謝してる。
すごいね、おめでとう!Linuxに初貢献するまでの道のり、読むのが楽しかったよ。深く掘り下げる姿勢にはいつも感心するし、記事にしてくれて本当にありがとう!
ボタンを押した時にusbhid-dumpで何か表示されるか教えてくれる?
これ、すごく励みになったよ!手順を詳しく説明してくれて本当にありがとうね!
すごくよく書けてる!この詳細なレポート、楽しく読ませてもらったよ。
それは本当にすごいことだよ、よくやったね!これからもLinuxにたくさんのパッチを追加していくことを期待してるよ!
なかなかクールな記事だね。俺もいつか、こんな風にハックする時間とか必要性ができたらいいなと思うよ。
素晴らしい記事をありがとうね!