4 ms·
> Is it technically possible to write a driver in Rust and add it to the kernel in a reasonable way? That is, without gobs of fragile shims, etc. I think this
by kogepathic 9y ago
> Is it technically possible to write a driver in Rust and add it to the kernel in a reasonable way? That is, without gobs of fragile shims, etc.
I think this is highly unlikely. The Linux kernel lacks an internal ABI [0] which would make writing drivers in a different language and targeting them at multiple kernel releases essentially impossible.
Many, many people and organizations writing drivers have complained over the years about the lack of an internal ABI. [1] [2] I would go so far as to say it's why Linux on ARM is such a dumpster fire. SoC vendors provide an SDK based on a certain kernel, and OEMs forever ship this kernel (with occasional backports for really severe bugs) because porting the device-specific changes to a newer kernel is just too much effort.
[0] https://en.wikipedia.org/wiki/Linux_kernel_interfaces https://en.wikipedia.org/wiki/Linux_kernel_interfaces
[1] https://stackoverflow.com/questions/827862/why-i-need-to-re-compile-vmware-kernel-module-after-a-linux-kernel-upgrade https://stackoverflow.com/questions/827862/why-i-need-to-re-...
[2] https://news.ycombinator.com/item?id=9220973 https://news.ycombinator.com/item?id=9220973
- pjmlp 9y agoGoogle created their own Linux driver ABI with Project Treble. Basically, it transforms Linux into a kind of microkernel, with drivers being implemented on their own processes, using shared memory APIs to talk with the kernel, based on an IDL (Interface Description Language). https://source.android.com/devices/architecture/hidl/ https://source.android.com/devices/architecture/hidl/
- kasabali 9y agoWhy do you think ABI compatibility is needed for wiring drivers in Rust? ABI compatibility is only needed for binary modules. Source compatibility should be enough for source code form.