After working with linux drivers for far too long, I’ve developed some strong opinions on the so-called “APIs” they implement.
After working with linux drivers for far too long, I’ve developed some strong opinions on the so-called “APIs” they implement.
That’s a fine mantra to have but is rarely true in practice. I’ve seen way to many needlessly breaking changes in open-source libs that are explained away with “users can just pin the old version until they update their code”.
To be clear, the linux kernel itself is almost never the cause of the breakage per se, but some other library often implementing one of the APIs it defines. Often the reason for the breakage is under-specification of the original API, for example including a
uint32 flags
field that is not checked against a known set of valid flags, and inevitably ends up populated with vendor-specific (and often conflicting) usages.As much as API design is about exposing the functionality you want, it also involves avoiding exposing functionality you dont’t want to expose. Open-source software often omits that critical design consideration, waving it away under the false virtue of “openness”.
Later…
How long until…