4 ms·
I'm wondering if you can build an actual "Linux from scratch" with this as the lowest level, without the need to use a host system at all.
by gigel82 3y ago
I'm wondering if you can build an actual "Linux from scratch" with this as the lowest level, without the need to use a host system at all.
- vitiral 3y agoWithout structs? Good luck...
- gigel82 3y agoLFS already has several "stepping stones" where it walks through a whole set of C compilers from very old ones compiling slightly newer / more capable ones and so on. Perhaps with a few more "layers of compilers" on top you can get a very early GCC going.
- FpUser 3y ago>"Perhaps with a few more "layers of compilers" on top you can get a very early GCC going." Applause. Best comment ;)
- DesiLurker 3y agowonder how many extra bytes for structs?
- vitiral 3y agoIn my experience, probably at least a 200-400 lines of C (another 512 bytes minimum? I don't know the conversion). The problem is not just declaring structs but accessing them, referencing them, accessing/referencing fields and subfields, etc. That has to all be in the syntax. For such a minimal project you can ignore initialization. I did all this while adding maybe 500 lines of C to GitHub.com/vitiral/fngi. Never tried for this level of minimalism though.
- geocar 3y agoOnce upon a time, when += was spelled =+, struct members in C were global names whose "values" were the offsets from the beginning of the struct[1]; a.b is simply a[ptrtab[b]] and a->b is a[0][ptrtab[b]]. [1]: This is why all of the names of struct members in unix are "needlessly" prefixed; i.e. struct stat.st_mode is not struct stat.mode because that could conflict with struct foo.mode until the early 1980s.
- DesiLurker 3y agoAh that explains it, I wondered about those old struct defs.
- mjevans 3y agoI can't help but wonder if this is written in x86-16 bit mode to implicitly use Real Mode BIOS functions and platform interfaces as well. There's something to be said for taking advantage of that existing code; but if that's a dependency it should be part of the environment manifest. Everything has (most things have) a context where it might be useful and that should be included in the explanation so a tool isn't misused and so incorrect expectations aren't set.
- xorvoid 3y agoIt’s written in x86-16 real mode because all immediates are smaller and switching to 32-bit mode takes a fair amount of code. I would have preferred 32-bit mode because real mode is awkward with its seg:off addressing scheme. Using the bios functions just allows it to have “not-boring” examples easily.
- mjevans 3y agoThat's true, but it's still a sort of library dependency. Even for very tiny computers with a lot of hardware assistance, the basic ROM for communicating with the world in a useful way is bigger.
- fosslinux 3y agoNot using this, but tangentially related is (full disclosure, i am a maintainer of this project) live-bootstrap, which uses about a KB of binary to do a full "Linux from scratch" style thing - read https://github.com/fosslinux/live-bootstrap/blob/master/parts.rst https://github.com/fosslinux/live-bootstrap/blob/master/part... for all 143 steps you have to go through to get there.
- gigel82 3y agoWow, just reading through the list of steps was fascinating!