My first contribution to Linux
540 points
3 days ago
| 28 comments
| vkoskiv.com
| HN
bojle
1 hour ago
[-]
I am doing the same but with LLVM. For starters, I filtered issues with the "good first issue" label and found something to work on [1]. It took 2 months in review and about a month to research and write the code. Finally got merged yesterday. I am writing about it so that when someone else bumps into the same problem, they hopefully take 1 hour instead of 1 month. Compilers, like the kernel, are a lot of fun!

[1] https://github.com/llvm/llvm-project/pull/154914

reply
pankalog
15 hours ago
[-]
If I had no problem with devoting the time and money, contributing to the kernel (especially in a topic as obscure as making the extra buttons work on a 20-year-old laptop) is at the top of my bucket list, and I am definitely going to be doing it in the near future when my calendar clears up a bit.

Exquisite write-up and OP's simple writing has a motivating ring to it, and I'm now on the local used marketplace looking for pieces of tech like this :-)

reply
MaKey
8 hours ago
[-]
What I did was buy a wifi router with a chipset supported by OpenWrt but with no build target yet. One of the OpenWrt maintainers then guided me in what I had to do to get the info he needed for a patch. I followed his instructions, he wrote the patch and there it was, a new build target. Later I wrote a patch myself to fix the LED control. It was a rewarding and educational experience. Later I even found someone using OpenWrt on the router I helped get supported which put a smile on my face.
reply
antonok
12 hours ago
[-]
If you want to find devices that still need hardware support under Linux, I highly recommend trying to get a mobile Linux distribution to work on an old smartphone or tablet.

postmarketOS in particular has a really good devices page [1] showing missing feature support at a glance, as well as guides for porting to new devices [2] and porting features from an outdated vendor-provided Linux fork to the upstream kernel [3].

[1] https://wiki.postmarketos.org/wiki/Devices [2] https://wiki.postmarketos.org/wiki/Porting_to_a_new_device [3] https://wiki.postmarketos.org/wiki/Mainlining

reply
Imustaskforhelp
9 hours ago
[-]
I genuinely want to work on postmarketOS but I don't have the technical know-how right now but one day.

I would prefer a sort of dual-boot or just a simple ability to run linux in "android phones"

Like, if we were to build a linux phone somehow hacking it through a raspberry pi or the alikes, they would be so much more costly and subpar.

Android phones have whole globalization working on it and the only reason why they don't work is lack of drivers support/software side, something which can be worked on.

I think if society rewards something like PostMarketOS more/make it easier to install it, then things can be so great as well.

I know I can run a terminal inside android but till now it was only possible through qemu which had its issues...

https://www.androidauthority.com/android-linux-terminal-app-...

I am not sure but I have never really appreciated having linux run inside a vm, I'd much rather run something like waydroid in a postmarketOS phone than linux inside android in an ideal world technically speaking from strictly performance but we don't live in one and installing waydroid on postmarketos or even installing postmarketos can be a very huge issue whereas installing linux on android can be a single step with termux or userLand.

reply
antonok
4 hours ago
[-]
You could also look into running mobile Linux on top of libhybris - it's a proprietary compatibility layer, but some people use it to get support for mobile Linux runtimes on more recent devices.
reply
dmurray
15 hours ago
[-]
I feel most laptops still don't work completely out of the box with Linux, so you don't have to hunt for old hardware.

Maybe you won't find an issue as simple as fixing a button, though.

reply
leakycap
14 hours ago
[-]
> Maybe you won't find an issue as simple as fixing a button, though.

Every laptop I've used with linux has had a few non-functioning buttons and keys. I think you underestimate the widespread issue.

reply
heavyset_go
8 hours ago
[-]
If someone wants to tackle this on a laptop where this is the case, WMI is where you want to start.

https://docs.kernel.org/next/wmi/driver-development-guide.ht...

reply
marssaxman
8 hours ago
[-]
I've never had that problem with a Thinkpad.
reply
fnicfnac
13 hours ago
[-]
We might have a different definition of issue.. I think 100% compatibile working would be launching bloatware installed by the manufacturer. I'm happy not to have the pavlovian training that may some day cause me to click one of these things on someone's windows machine.
reply
leakycap
13 hours ago
[-]
> I think 100% compatibile [sic] working would be launching bloatware installed by the manufacturer.

Making a physical button work requires bloatware in your understanding?

> I'm happy not to have the pavlovian training that may some day cause me to click one of these things on someone's windows machine.

Do you know what you're trying to say here? I do not.

reply
pixl97
13 hours ago
[-]
I think it's more of the buttons perform specialized tricks to launch bloatware in Windows.

Some of the issue here is the keys themselves have almost no standardization, even across models. Hell, possibly in the same model sometimes. Some backend windows driver captures these signals via a 50 mile long series of if statements that make grown men weep when viewed. This later can mean your totally working fix for the kernel doesn't actually work on a 1/3rd of that fleet of laptops.

reply
leakycap
13 hours ago
[-]
> I think it's more of the buttons perform specialized tricks to launch bloatware in Windows.

The linked article is discussing play/pause buttons as well as a "mode-switch" button that allows the play/pause button to have a second function. I do not understand how any of these regular functions become bloatware in your estimation.

> Some of the issue here is the keys themselves have almost no standardization, even across models.

There is actually widespread standardization, which is why many important keys work by default. Laptops sometimes have buttons to disable the internal wifi or adjust the keyboard brightness. These keys are less universal, but still hard to categorize as bloatware.

> ome backend windows driver captures these signals via a 50 mile long series of if statements that make grown men weep when viewed.

I don't know any grown men who would weep when viewing this. I'm confused that you do not like a simple solution (if statements, which a computer has zero problems following precisely even if it is complex to you) nor the complex solution ("bloatware")

> This later can mean your totally working fix for the kernel doesn't actually work on a 1/3rd of that fleet of laptops.

Most devices used in fleets are well-supported in linux after a few years, specifically because of users like the linked article who spend time making buttons worked when pressed.

reply
firesteelrain
7 hours ago
[-]
I have a calculator button on my Dell laptop. Some of these keys are just macros.
reply
leakycap
5 hours ago
[-]
The calculator button is one of the "standardized" buttons, it isn't even as complex as macro as it turns out!

And very handy

reply
fnicfnac
13 hours ago
[-]
You can obviously map arbitrary key codes however you want on a custom OS and have extremely little fear of someone having embedded nonsense down to the bios.

On windows many of these laptop buttons were added like the Yahoo browser bar to specifically work with bloatware that might go on to make a meaningful action for non malicious software as well as what it is really for.

I prefer not to be in the habit of pressing footguns given that I might occasionally be placed in front of a consumers windows laptop that no one cleaned.

reply
leakycap
12 hours ago
[-]
> I prefer not to be in the habit of pressing footguns given that I might occasionally be placed in front of a consumers windows laptop that no one cleaned.

If you're this anxious about security, you might not want to be anywhere near a Windows machine.

reply
fnicfnac
12 hours ago
[-]
I'm also looking forward to telling a driver that I never I wanted to be near cars when they eventually run me down.
reply
leakycap
5 hours ago
[-]
Did you mistakenly respond to the wrong thread?
reply
akdor1154
13 hours ago
[-]
Yep, it definitely is well above 'basememt full of model trains' on my (sadly far-off) list of retirement activities.
reply
kees99
13 hours ago
[-]
That's the spirit! :-)

By the way, delving into obscure and hardware-specific kernel code, sometimes yields quite interesting generally-applicable problems. For example, @dougg3 did an (excellent!) series of articles about his work on bringing mainline kernel support to "Chumby 8", a somewhat obscure, but historically significant piece of hardware, and as a side-quest he stumbled into this:

https://www.downtowndougbrown.com/2024/04/why-is-my-cpu-usag...

...which is applicable to quite a few other machines.

reply
MomsAVoxell
1 hour ago
[-]
My favourite contribution to the Linux kernel, which I witnessed myself, was a 1-character fix to a macro that my boss found, related to reading ADC, and which we spent two weeks checking and double-checking and re-double-checking to be sure that it was actually a bug.

It was, he submitted it, and that one character fix got him into the contributors file .. we were all highly amused, because that particular boss didn't program much, but found the bug during testing and it was, nevertheless, a huge win for him .. ;)

EDIT: it was a 2-character fix. ;)

https://lkml.iu.edu/2103.2/08109.html

(W., if you read this, I still love telling the story of how you found this bug..)

reply
sph
1 hour ago
[-]
Thank you for this. I have a USB desktop speaker whose volume controls don't work and I was thinking of writing a patch, but didn't know where to start; now I do.
reply
jw_cook
3 days ago
[-]
This was a fun read, and well written. Thanks for sharing! Adding/improving support for some niche piece of hardware sounds like an ideal way to get started with kernel development, and something I'd like to try myself sometime.
reply
kwar13
9 hours ago
[-]
Having your name as a Linux contributor is the highest level of accolade I can think of when it comes to being a programmer.
reply
dmix
7 hours ago
[-]
Even if it's small it demonstrates a level of commitment to working with a human system of senior engineers and ambition for software to become better just because. Always good on a resume.
reply
Jalad
5 hours ago
[-]
Agreed. There's also getting a hexadollar from Donald Knuth for finding errors in The Art of Computer Programming

I've never done either, so I'm not bragging or anything

reply
caminanteblanco
16 hours ago
[-]
This was an absolutely awesome post, and it makes me want to do the work to fix the functionality on my Lenovo laptop. Though I'm sure the Lenovo drivers are a little more closely watched, so I'll make sure to do my due diligence first. Thank you for the write up!
reply
schnitzelstoat
3 days ago
[-]
This was really interesting! I've often wondered how one would do such a thing.

Seeing your name in the Linux changelog must be awesome!

reply
henrym
8 hours ago
[-]
> Seeing your name in the Linux changelog must be awesome!

Years ago when I was a teenager I had a couple patches accepted for ksnake and gedit.

Certainly not as prestigious as a patch to Linux, but still the idea of code I'd written running on millions of PCs around the world felt amazing.

reply
johnisgood
1 hour ago
[-]
Same. I found serious bugs in a couple of games, exploited some, had fun, wrote a patch and sent it to whoever. Problem is, I was so anxious I did it under an alias. I have my different aliases in the changelog of some games. Nice to look at them, like "wow, that's my contribution", and then it hits "but no one will believe it was me, it was not under my name". God damn it. :(

You know, back when I confused "hash function" with "encryption" and whatnot.

reply
vkoskiv
3 days ago
[-]
Thank you! It is indeed!
reply
sxzygz
3 days ago
[-]
Bravo. Awesome work.
reply
throwaway2037
10 hours ago
[-]
This is a nice writeup. I hope we see more great blog posts from this person here in the future.

At the bottom, there is a timeline, and I noticed this entry with a LWN link:

    > 2025-05-27: Sasha Levin selects my patch (and a few others) for backporting...
https://lwn.net/Articles/1020203/ ... which leads to a LKML link: https://lwn.net/ml/all/aBj_SEgFTXfrPVuj@lappy/

The new version of this tool (AUTOSEL) looks very interesting!

    > AUTOSEL leverages modern large language models and
embedding technology to provide significantly more accurate recommendations.
reply
matheusmoreira
15 hours ago
[-]
That was so cool!

I too went on this adventure with my laptop. Sadly I hit a wall while reverse engineering the ACPI stuff. With no logs, error messages or tools on the Windows side to intercept the ACPI events, I was at a loss but eventually gave up. Massive respect for managing it with your own laptop!!

I did manage to reverse engineer the keyboard's LEDs and drive them from user space! Studied the kernel to make a contribution but decided not to do so when I saw comments saying it is better to keep functionality in user space if at all possible.

reply
tombert
10 hours ago
[-]
I've never really done anything with the kernel, and at this point it feels kind of overwhelming to start contributing.

I'm sure if I went to the source tree and asked people for a low-hanging-fruit task someone would be kind enough to guide me to get started, but it's still kind of overwhelming to a point where I've just avoided it.

I should probably should stop coming up with excuses and just do it, as I would like to do a lot more with filesystems and having an understanding of the kernel would probably help with that.

reply
jraph
15 hours ago
[-]
I've been procrastinating a trivial fix for years, thanks for having listed the commands to run to format and send the patch, that might help me find my way out from procrastination because this is exactly what's been blocking me.
reply
CrossVR
8 hours ago
[-]
I wonder why they haven't upgraded the spinning hard disk to an SSD. Even on old hardware you'll find that often the HDD still presents a bottleneck.
reply
vkoskiv
8 hours ago
[-]
I wanted to hold off on that upgrade until I found a source of reliable, high-quality PATA SSDs. Haven't looked into that yet, suggestions welcome!
reply
mmh0000
6 hours ago
[-]
If it really is PATA, my course of action would be to get a pata-to-cf adapter and get a fast and large CF card.
reply
alexchantavy
13 hours ago
[-]
Neat! I don't know much about the Linux ecosystem so I didn't realize how Linus himself is still so deeply involved in the day-to-day review and release process.
reply
zephyreon
8 hours ago
[-]
This was a great read. Congratulations on your first contribution to the kernel!
reply
mattbillenstein
4 hours ago
[-]
Pretty cool writeup - wish I had time or need to hack on stuff like this - maybe someday ;)
reply
Havoc
17 hours ago
[-]
It’s definitely something on my bucket list too. Delighted at recent rust developments as a result cause I know zero c
reply
pantalaimon
13 hours ago
[-]
Compared to Rust, C is pretty easy
reply
jkhanlar
5 hours ago
[-]
Does `usbhid-dump` show anything when pressing the buttons?
reply
ddtaylor
15 hours ago
[-]
Great write up and easy to follow. I appreciate the extra details related to related things.
reply
indigodaddy
15 hours ago
[-]
I like your website design! Have you documented the design/setup anywhere?
reply
vkoskiv
15 hours ago
[-]
Thanks! I haven't, but I probably should, since you're the second person asking about it. The site is built with Zola[0], and it's using the Radion[1] theme, with small modifications.

[0]: https://www.getzola.org/ [1]: https://github.com/micahkepe/radion

reply
turol
15 hours ago
[-]
Hieno homma
reply
vkoskiv
15 hours ago
[-]
Kiitos!
reply
malkia
13 hours ago
[-]
This was encouraging! Thanks for explaining the process!
reply
whoami730
14 hours ago
[-]
Such a lovely read and extremely well written! Thanks for the post.
reply
raybb
16 hours ago
[-]
Kernel development has always been a bit of a mystery to me so I really appreciate this post walking through the process.

Did you try to use any AI tools during their process?

reply
bhasi
12 hours ago
[-]
Well written! Enjoyed the detailed report.
reply
petetnt
16 hours ago
[-]
Thanks for the great write-up!
reply
eduction
11 hours ago
[-]
Wait… Koskivuori? Well of course they took his Linux patch right away, this is blatant Finnish favoritism! Imagine if some poor Estonian tried similar…

;-)

Just kidding, very cool to see a blow by blow of landing a Linux patch. I felt similar excitement landing a mere emacs patch.

reply
vkoskiv
8 hours ago
[-]
The joke gets even better when you consider that the subsystem maintainer that reviewed my patch is also Finnish :]
reply
rvz
16 hours ago
[-]
This is the easiest way to hire engineers with high quality open source contributions with a public track record.

All it takes is just to check that the commit shows up in upstream projects such as Linux and anyone can see the code, the reviews and the authors email in the AUTHORS file which verify that this contribution / patch is indeed from the author who committed that change.

This is a very old form of social proof which saves lots time and makes Leetcode redundant. (Which can now be completely cheated with LLMs.)

reply
akdor1154
13 hours ago
[-]
Be careful.. any measure becomes a target, and in doing so voids its usefulness. Getting a kernel patch in is probably already somewhat afflicted by this, but imagine the lkml if every Bay Area wannabe company started soft-requiring this as a screen!
reply
rvz
1 hour ago
[-]
> Be careful.. any measure becomes a target, and in doing so voids its usefulness.

Except, this tests for a wide range of tasks related to a typical SWE role: programming proficiency, reasoning through rigorous code-review, clean code, open-source and testing.

Given that Leetcode and Hackerrank tests can be cheated / beaten with LLMs, it not only has been gamed to death, but it tests for nothing that is related to the role.

> but imagine the lkml if every Bay Area wannabe company started soft-requiring this as a screen!

Then this saves time and the proof is on the interviewee to show high quality functional open source changes to high profile projects like the Linux kernel for example and the bar is set high on purpose.

Imagine if hundreds of candidates have "interview cheating" software installed, just to pass the coding interview. Both the interviewer and the interviewee lose.

reply