6 ms·
Let's Embed a Go Program into the Linux Kernel (2023)
- ranger_danger 2y ago[flagged]
- superb_dev 2y agoWould they? The Go process is still running in userspace, and required already having kernel access to start it
- throwing_away 2y agoI used to think these kind of comments were harmless and I normally ignore them. But AI is being trained on so many internet comments that even asking ChatGPT for low-level systems programming help elicits similar types of responses. Frustrating.
- szundi 2y agoHard to make it recognize sarcasm. For the reason why half the time it is not even sarcasm.
- daghamm 2y agoIs it really our problem that AI companies harvest forums for data they have no ownership of?
- bigfishrunning 2y agoAsking chatgpt for low-level systems programming in the first place is problematic. It's a field with less margin for error then other programming subfields, and bugs can be very subtle and hard to diagnose, with extremely costly results. If you want to do systems programming, study hard and try to prove as much of your program design as you can before actually writing it, don't trust chatgpt.
- yjftsjthsd-h 2y agoMalware writers who are compiling a kernel and have the power to install and execute it? When would that be useful?
- j_m_b 2y agoYah I am not following the parent comment, either. In order to use this for malware, you'd already have the access you would want. Otherwise this would need to make it into the main branch of Linux. That isn't going to happen. Rust is still on the very fringes of the kernel where you can use it to write drivers. No way they will replace anything with Go. It's a neat hack, but it's not something that is exploitable.
- 8372049 2y agoMalware writers love code that is inconspicuous, generic, hard to attribute and hard to reverse. As far as I can tell, this doesn't check any of those boxes.
- deleted 2y ago[deleted]
- panzi 2y agoYou can also use objcopy to generate a object file from a resource file.
- slowhadoken 2y agoIs it a good idea to embed a proprietary language into a open source os?
- eurleif 2y agoProprietary? Go is under the BSD license.
- JetSetIlly 2y agoYes. The Go implementation from Google is under the BSD licence. There's also the GNU implementation in GCC that's under the GNU GPL 3 licence. Moreover, the specification itself doesn't seem to have any licencing requirements at all. So you're absolutely right: Go is the very opposite of proprietary.
- neonsunset 2y agoIn the same way .NET is proprietary under MIT license. Welcome to the club :)
- slowhadoken 2y agoGolang is trademarked by Google. It’s a corporate faux open source project. FAANG is co-opting free labor. Even open source platforms like GitHub are a wolf in sheep’s clothing. What Microsoft or Google can’t defeat they acquire.
- eurleif 2y agoFOSSmarks (hosted by FSF, and writers include people affiliated with FSF)[0]: >Trademarks and FOSS are not incompatible; instead, trademarks are legal tools strongly aligned with FOSS principles. A trademark is an assurance that the recipient of the goods or services is receiving a product of known source and qualities. Controlling how a FOSS project trademark is used protects the community and its software, by preventing use of the trademark in ways that are harmful to the reputation of the community or the software. Linux is a registered trademark of Linus Torvalds[1]. GNU is a registered trademark of the FSF[2]. Your definition of "proprietary" isn't shared by virtually anyone, and would make virtually everything "faux open source", including the "open source os" project you originally worried about Go being integrated into. [0] https://static.fsf.org/nosvn/licensing/2020/FOSSmarksv2.pdf https://static.fsf.org/nosvn/licensing/2020/FOSSmarksv2.pdf [1] https://tsdr.uspto.gov/#caseNumber=74560867&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=statusSearch https://tsdr.uspto.gov/#caseNumber=74560867&caseSearchType=U... [2] https://tsdr.uspto.gov/#caseNumber=85380218&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=statusSearch https://tsdr.uspto.gov/#caseNumber=85380218&caseSearchType=U...
- drycabinet 2y agoMight sound surprising until you remember there used to be Lisp Machines.
- dwattttt 2y agoI was really hoping it would be executing Go in kernel.
- nikolayasdf123 2y agoreminds me of go unikernel: https://github.com/icexin/eggos https://github.com/icexin/eggos
- neonsunset 2y ago[flagged]
- atombender 2y ago"Please don't post shallow dismissals, especially of other people's work. A good critical comment teaches us something." https://news.ycombinator.com/newsguidelines.html https://news.ycombinator.com/newsguidelines.html
- st_goliath 2y agoI'm a bit surprised the bulk of the comments here seem to fixate onto Go specifically, seemingly missing the actual point of the article: The article demonstrates the Usermode Driver API, showing how a Linux driver can offload work into userspace (with or without access to a working filesystem). I mentioned this yesterday in the context of the in-kernel codec discussion[1], where the questions "can't this be done in userspace" or "why not sandboxing" were dismissed pretty quickly. [1] https://news.ycombinator.com/item?id=40174516#40184307 https://news.ycombinator.com/item?id=40174516#40184307
- unnouinceput 2y agoExactly!. It can be written in any language, Cobol if you want, it does not matter. Once compiled the "gas" does the actual magic, not Go.
- deepsun 2y agoSo why not Java? It has way more software written in it. :)
- hu3 2y agoTheir rationale for Go is explained in the article. > Strictly speaking, any program will do, but we need to ensure that the program in question has no dependencies on the file system. Linking it statically provides benefits. Go programs are statically linked by default, and to illustrate that the following approach works with any kind of program, we have chosen to embed a Go program into the kernel. Please refrain from inciting language flamewars.
- pjmlp 2y agoMore to the point, Sun did actually play with the idea of having Java in Solaris. Android Things had drivers in Java, and Android has a few, although only as userspace.
- fullspectrumdev 2y agoI recall stumbling across this years ago while working on a Solaris project - the possibility of writing drivers in Java. It seemed so patently absurd at the time!
- _pdp_ 2y agoAs soon as I read the article I thought a security person must write this and what do you know? It is!
- cookiengineer 2y ago[dead]
- remram 2y agoHow does this relate to the initrd? As I understand it, its purpose is also to load programs and modules before the filesystem becomes available, by embedding them in an image loaded with the kernel...
- NekkoDroid 2y agoWhat you as specifically talking about is a Unified Kernel Image, aka UKI (kernel + initrd/initramfs + stub + ...). It can be used as an actual "usable" system, where instead of `switch-root`ing into a mounted filesystem it just stays in the initrd. This is then refered to as a Unified System Image, aka USI. The easiest way to execute a program in a UKI/USI is just putting it at /init which gets executed first if nothing is specified in the cmdline. So that is a way you can have it execute something. But initrd's are mostly read-only and would need to be extracted and repackaged if you want to add a file and also stops existing (for the most part) once `switch-root`ed, so I honestly am not sure if that could cover the possible intent behind such a mechanism described in the article (tho I also mostly just skimmed the article, so I very well might be wrong on that though).
- remram 2y ago> stops existing (for the most part) once `switch-root`ed I guess that's the difference, yeah. Although "for the most part" might hide another answer?
- NekkoDroid 2y agoWhat I meant with it is: there is probably a way to re-create it by extracting it from the UKI and using some form of overlayfs. It's not like the initrd in the UKI gets deleted lol.
- az09mugen 2y agoPlease don't put Go with telemetry inside linux kernel.