BootOS: Monolithic operating system in 512 bytes of x86 machine code
github.com
github.com
And they have maintained their achievements mostly private, perhaps because whenever they've talked about their details publicly, the commentary has mostly been of the form "This isn't possible" and "This is obviously a fraud" from the sorts of ignorant people who make a living installing virus scanners and pirate copies of Windows and thus imagine themselves to be computer experts. (All of this happened entirely in Spanish, except I think for a small amount which happened in Zapotec, which I don't speak; the family counts the authorship of a Zapotec dictionary among their public achievements.) In particular, they've never published the source or even binary code of their operating systems and web browsers, as far as I know.
This changed a few years back when Óscar Toledo G., the son of the founder (Óscar Toledo E.), won the IOCCC with his Nanochess program: https://en.wikipedia.org/wiki/International_Obfuscated_C_Cod... and four more times as well. His obvious achievements put to rest — at least for me — the uncertainty about whether they were underground genius hackers or merely running some kind of con job. Clearly Óscar Toledo G. is a hacker of the first rank, and we can take his word about the abilities of the rest of his family, even if they do not want to publish their code for public criticism.
I look forward to grokking BootOS in fullness and learning the brilliant tricks contained within! Getting a full CLI and minimalist filesystem into a 512-byte floppy-disk boot sector is no small achievement.
It's unfortunate that, unlike the IOCCC entries, BootOS is not open source.
But only in my dreams do I approach achievements like Biyubi.
>Probably nobody will read this comment here, but I thought it was worth mentioning.
This is ridiculously impressive hacking up there with Woz code.
Why did Mozart write music? What would Mozart have done if he lived in the city of the deaf?
I mean they've written a lot of stuff on their web site about their motivations — they saw that electronics were the wave of the future, they wanted to make Mexico technologically independent and limit the damage of the neoliberal economic model, they wanted to preserve the Zapotec culture from obliteration, and so on — but I think basically it's that they like doing it, in the way Mozart liked music. I'm sympathetic to those other motivations but I don't think they would have been sufficient to maintain their progress in the face of the opposition they've faced from the Mexican government, which continues to adhere to the obsolete "progress is big factories" model mixed with the simply traitorous "progress is installing Microsoft software" model. (They've written about this stuff on their website too.)
As far as I can tell, they make a living by building some industrial control hardware and teaching electronics classes. Maybe a member of the family will comment and offer more detail.
The HN profile of OP says: “I fight boredom by challenging myself to my limits.”
That’s the hacker spirit :)
It's not? What's that asm file in there? It looks like it's the full source code for the image. Or do you mean there's no license file, so it's not free-software/copyright?
"Open source" has been understood to mean "freely redistributable and modifiable" source for a couple of decades now, and if you used it to mean something else without clarifying, you should expect that they will misunderstand you.
I don't know if this is true universally, or only in certain communities.
The same exact arguments can be made about free software, only worse because colloquially users have traditionally confused it with the term freeware.
It’s the difference between UFC and MMA, or declaring that addition == subtraction (if only you negate all the terms).
If you don’t use the term correctly, then you’re muddying the waters.
Source Available - unknown license
Free Software - no cost, may or may not have source available
Open Source - OSI approved, there exists an automatic license to at least use or redistribute the code unmodified
Two commonly used definitions are the Debian Free Sotware Guidelines (https://www.debian.org/social_contract#guidelines) and the FSF's Free Software Definition (https://www.gnu.org/philosophy/free-sw.en.html).
At least for "free", it (used to be?) very common to add an "as in" after, like "free as in beer" (you don't have to pay) or "free as in speech" (you can do what you want with it).
Who benefits from watering them down? People who want to take advantage of confusion to release their software under weaker licenses while taking advantage of the "open source" or "free software" names.
Not really, no. The FSF definition of 'free software' is accepted by the technical community as the definition of the term. Same goes for the OSI's definition of Open Source.
> not everyone automatically understands the terms according to these definitions
Not really, no. No-one knowledgeable about these topics is going to insist upon non-standard definitions of the terms. Marketing drones may abuse the terms, and ignorant people don't know any better than to be imprecise, but they are not the same thing as what you are suggesting.
Debian do not make up their own definitions. They explicitly mention both the FSF and OSI in their article on licensing. They certainly have their own ideas on intellectual property (their famous objections to Mozilla's rules about the Firefox trademark), but I don't see them redefining any terms. They are careful to use Debian Free Software Guidelines (DFSG) when referring to their own rules. [0]
Aside: it can be helpful to capitalise to emphasise that you mean the proper definitions of the terms, e.g. The software is neither Free Software nor Open Source. Clunky, sure enough, but people do occasionally make up their own definitions and run with them, often enough that it's a problem for clear communication.
I'm not really sure why. Making up your own personal definitions for terms already in common parlance, is usually treated as an exercise in obtuse silliness, for obvious reasons.
Usually, no exception is made for when an accepted technical term is misused in common parlance, e.g. using 'theory' for any explanation that pops into your head, or referring to an automatic rifle as a 'machine gun'. In those instances we separate the popular use of the term from the technical one, and still insist on correct terminology in technical circles.
[0] Point 31 of https://people.debian.org/~bap/dfsg-faq.html
That's not a normal sentence construction though, it sounds tortured.
You may be able to see through my windows into my home: that doesn't mean my home is open to you.
(Not, of course, BootOS; it never claims to be open-source.)
People who have been using a term their whole lives might not have any idea where it came from, or that it even has an official definition.
Compound this by the fact that many people are jumping into this field where English is not their first (or even second) language.
When you open source, you can see the source.
Well, language is open, and confusing terminology will cause misunderstandings. Besides, there is not one definition of open source, and the most common definition has 10 criteria. You're not exactly doing anyone a service by calling someone who is not aware of all this background and understandably uses a rational interpretation of "open source" a roach. In fact, you come across as a douchebag.
(Now, I agree that intentionally abusing the term is reprehensible, but that does not seem to be the case here)
Whatever problems you may have with my ethnicity hardly seem relevant here! We're talking about con men falsely claiming that their software is open-source in order to free-ride on the goodwill the open-source community has earned through decades of hard work and persistence against impossible odds in order to guarantee basic human rights to everyone in an increasingly computer-mediated world. If it takes douchebags to show the falsity of their false claims, then let's have more douchebags! (But actually I think people of any ethnicity are equally capable of standing up for what is right; it doesn't have to be a douchebag like me.)
I don't know why you think the error was unintentional in this case. The poster in question wrote, "You mean open source yes, free software no." They are implying that they not only have knowledge of the nuances of the definitions in question, but are so certain of it that they correct other people for misusing the terms — they aren't just guessing. Presumably such a person will at least have read the introductory paragraph on the Wikipedia page for "Open-source software"!
(I don't understand your remarks about ethnicity. As far as I know 'douchebag' is not a racial slur.)
> Unfortunately, they live on the outskirts of Mexico City, not Sunnyvale or Boston, so the public accounts of their achievements have been mostly written by vulgar journalists without even rudimentary knowledge of programming or electronics. It would be a valid reason in '80s
All of that sounds very interesting, but as edgarvm points out, it's not exactly evidence. Reads more like a product brochure than a research paper detailing how their claims are possible.
Also they offer a course in building your own electronics that you can sign up for if you go to their workshop. I can't go to Mexico so I haven't signed up for it; it's at least theoretically possible that the course doesn't really exist and will be canceled if you do sign up for it. But if that doesn't happen you can go there and take the course and see the G11V3 and presumably Fénix and Biyubi in person. I've seen comments in news-website comment threads from people who claim to have done so and claim that it's real, and no comments from people who claim to have done so and then been rejected, so it seems most likely that the course is for real.
Together with Óscar Toledo G.’s amply demonstrated skills at programming under extreme resource constraints, skills which require a great deal of practice to acquire, I think the evidence strongly favors the hypothesis that Fénix, Biyubi, the G11V3, the electronics courses, and the rest of it is real, if maybe a bit oversold.
> No defects present, thanks to the constant improvement. http://www.biyubi.com/eng_ventajas.html
> without vulnerabilities http://www.biyubi.com/eng_ciencia.html
I could not find any information on a course available, could you point me in the right direction? It is a bit odd to me that none of their products are available for purchase from their website (I saw the $99 computer with minimum order of 1000 units but when clicking through I was redirected back to the home page).
I think their G11V3 computer design is pretty out of date now.
Sometime in the past couple months, there was a link on HN to a project also by one dude, who's implementing a CPU on breadboards, with wires. (Can probably be found by the score filter from the ‘undocumented features’ of HN: the post got >2000 points.)
Computers aren't necessarily gigantic corporate undertakings.
Maybe you mean Ben Eater. He has a great Youtube Channel: https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA
I was mistaken, the CPU is a stock Z80 but the guy implements other parts of a bespoke game console, in microcontrollers.
I'm not saying it's not possible, there are much stories in HN about guys creating VGA cards or self-made computers, I'm asking for evidence.
I just watched some of TV interviews with the family and saw the rest of his work, and it's pretty amazing. Check out Invaders in 512 bytes [1][2], or Aardvark game for the Atari 2600 ([3]).
Also seems he has just self-published a book (as of July 27):
Do you would like more details on the inner workings? This program is fully commented in my new book Programming Boot Sector Games and you'll also find a 8086/8088 crash course! Now available from Lulu [4]
[1] https://github.com/nanochess/Invaders
[2] https://www.youtube.com/watch?v=pC976eejfms
[3] https://www.youtube.com/watch?v=HNZfw6jShng
[4] http://www.lulu.com/shop/oscar-toledo-gutierrez/programming-...
The unqualified claim - may I say lie - that CPU time is cheaper than programmer time was never true and never will be[0] because it depends, it depends on the economics, and a surprising amount of my time has been taken up optimising for speed on multicore modern CPUs. Exactly what other people say isn't worth doing, right up until it is - and it often is.
Optimising for speed often means optimising for caches, and that means optimising for size[1], so I'm going to dive into this guy's stuff.
[0] and I'd ask people to stop repeating it unless the larger context is accounted for.
[1] and cache-friendly access patterns; another issue.
I'll be surprised if you learn new things about cache-oblivious algorithm design from BootOS, though.
> Do you would like more details on the inner workings? This program is fully commented in my new book Programming Boot Sector Games and you'll also find a 8086/8088 crash course!
I created one such game [1] a few years ago and had plenty of fun. I'm pretty shocked to see an actual book published specifically about this niche topic. I haven't read it, but I hope it gets some recognition, because IMO toying with 8086 is one of the best ways to get into bare-metal coding.
I'm well aware that people in Mexico City aren't illiterate paupers. That's not what I was saying, man. But you're going to have a hell of a time launching a new kind of laptop in Mexico City, and that's what they were trying to do.
If you make fun of the errors in the translation I will make fun of you mercilessly for not knowing any Spanish at all.
Unfortunately I can't update my top-level comment above.
They've translated some of their pages themselves, although the translation is somewhat out of date: http://www.biyubi.com/eng_principal.html
Wow. None of this is plausible.
I would make a recommendation to the BootOS project which is to squeeze a function table as I have done in order to allow programs to call functions in the kernel. If not, you either end up re-writing these functions for each of your programs, you have to recompile your programs any time you change your kernel or you end up trying to maintain jump positions.
For those still reading, I'm working on a large overhaul of saxos which includes very simple multi-tasking (currently working). The intention will be to have the kernel load a 512 byte GUI on top and then for the programs to have access to a terminal within the GUI. Once that's working I then want to move towards also allowing programs to draw to the Window, but that also brings its own issues.
[1] https://bitbucket.org/danielbarry/saxoperatingsystem/src/mas...
I don't think BootOS tries to export its filesystem API to user programs. BootBASIC in particular doesn't seem to have a way to save and load programs.
Brilliant work!
(Apparently I heard about this before and never looked at it? Because I have a clone of it on my laptop dating from September 14th.)
Yes, but it offers more to the programs that it loads. There's a trade-off when you go this low on disk space!
> But the filesystem supports more than one sector per file?
SaxOS supports half the disk, but each file has to be 512 bytes [1]. There are potentially work arounds for this limitation of one sector per file, but it's just hacky. (For example, you could name your files txt0, txt1, ... - or you could leave some header information in your program's file for more data.) I will fix this in a future version though, the plan is to keep loading sectors by the same name in the file table.
> Saxos is open-source, unlike BootOS, even if maybe that would be clearer if you used a widely-recognized license.
When I wrote this I had no idea about licenses :) I will look to update this, but the project is mostly just archived for now.
> I don't think BootOS tries to export its filesystem API to user programs. BootBASIC in particular doesn't seem to have a way to save and load programs.
It takes very little to extend the functionality of your kernel to your implementing programs, hopefully BootOS will do this in the future. At some point I want to write a simple self-writing documentation (using the comments structure) so that I can always produce up-to-date documentation for the OS.
> Brilliant work!
Thanks!
I was trying to build a very small low end compression algorithm for it to, but unfortunately I came hard up against entropy. The idea worked (as I envisioned it) but it had the effect of just transforming the dimension the data was stored in and adding unthinkable amounts of computational power and memory being required to get it back.
> (Apparently I heard about this before and never looked at it? Because I have a clone of it on my laptop dating from September 14th.)
Awesome! My plan for quite a while has been to write a small book and guide people through building their own very simple OS. I think people building their own 512 byte boot-able kernel is a nice intro into OSes whilst also having enough limitations that at some point you can say "this is complete". Anyway, it's what I wish had existed when I first set out may years ago!
Speaking of which, I must give a shout out to MikeOS which is where I learned about assembly and OSes [2].
[1] https://bitbucket.org/danielbarry/saxoperatingsystem/src/96c...
I strongly encourage you to stick an explicit license on it if you want people to study it! Otherwise there's the risk of a Numerical Recipes or SCO lawsuit nightmare. (While we were writing this thread, Óscar Toledo G. added a BSD license to BootOS!)
I wonder—and maybe it's presumptuous to offer suggestions like this without working code, so feel free to ignore it—if it might be more flexible to go the BootOS route of including at least some kind of hex or octal† input in the initial boot monitor, and relegate the filesystem to a loadable device driver in a second sector? It would be less convenient for running apps that want to use the firesystem, since you'd need to run two commands instead of one, but it also means those 512 bytes are sufficient by themselves to bootstrap anything else you wanted. With enough work.
…holy shit, you have a scrolling full-screen editor in one sector? This is amazing.
† I like octal because (sorry, rdl) the 8086 instruction set is way easier to read in octal. Also octal input takes less code than hexadecimal input, unless there's something I'm not seeing, or you're willing to count 0123456789jklmno.
Dunno yet how it ends, but I'm just happy that someone writes fiction involving assembly instructions.
I'm not concerned with lawsuits but allowing people to work with it is a good enough reason to add one.
> (While we were writing this thread, Óscar Toledo G. added a BSD license to BootOS!)
Very cool :)
> t might be more flexible to go the BootOS route of including at least some kind of hex or octal
I think that really depends on the goal of the OS, if it's to be self contained then fair enough, but it kind of limits out of the box usability for a normal user. I think most people would bork at having to type any program they want to use into the terminal each time they boot/test the system.
> …holy shit, you have a scrolling full-screen editor in one sector? This is amazing.
Thanks :) I will at some point improve upon it too, there's definitely some parts that could be better done.
> Also octal input takes less code than hexadecimal input
In terms of amount of code required, I'm not sure. Maybe there is some way to utilize AAA, AAS, DAA or DAS for converting hex to a value with minimal commands. The documentation appears to be quite crappy for these op-codes though, apparently Intel even managed to confuse themselves (which doesn't bode well for their reliable implementation) [1].
The other problem is that re-packing octal input back into raw bytes (for running) will be non-trival, the reason hex is generally used is because it represents a nibble (4 bits) and you can get away with pairs (i.e. OF 3A B7). Octal on the other hand is gonna be messy, you either have 3 octal characters per byte and lose packing density (even more) or you have cases where an octal character contains information for two neighboring bytes.
[1] https://stackoverflow.com/questions/51710279/assembly-instru...
I didn't mean to leave out firesystem functionality entirely. Clearly you still need a way to load programs from the disk without typing in a bootstrap program!
I agree that octal is less dense. But it's a lot more readable, because operand fields are isolated in a single digit (usually) and not split across digits and mixed with opcode bits.
In my mind, if you're going to make assumptions such as having a valid file table, making the assumption you have some basic programs ready to be loaded is not too much of a leap?
By the way, once I've got a filesystem up and running that can load in files greater than 512 bytes, it makes sense then to build a very basic assembly compiler. There's a bunch of tricks one could pull in order to make compiling a single parse deal for relatively large files at the sacrifice of efficiency. I think I could quite easily drop support for half of the 8086 instruction set and still end up with something very usable.
> I agree that octal is less dense. But it's a lot more readable, because operand fields are isolated in a single digit (usually) and not split across digits and mixed with opcode bits.
Are you able to give a small example, I'm not sure I follow the thinking? From what I understand, for each octal character you're representing 3 bits of binary. With two characters you have 6, but you're still short 2 bits for a byte.
You definitely don't need half of the 8086 instruction set for a usable programming system. 20 instructions and a few addressing modes is plenty. On the rare occasion you need DAA or ROL you can just use a DB. RPN syntax may simplify parsing.
As for octal, yeah, you need three decimal or octal digits to represent a byte, and the most significant digit can only be 0, 1, 2, or in octal, 3. Detailed notes are in http://www.dabo.de/ccc99/www.camp.ccc.de/radio/help.txt
Thanks for sharing by the way!
https://thestarman.pcministry.com/asm/mbr/index.html
Writing a tiny program that lets you modify memory, and more importantly execute it, is the first step in the "bootstrap pilgrimage" to creating your own environment and eventually OS, but this one seems deliberately limited; nonetheless, starting with this, one can use it to create the next stage of the bootstrap, 512 bytes at a time.
For the new generations this will seem not to have any real applications beyond code golfing.
But from a nostalgic point of view, it brings me back to the demoscene era. I still fell a wistful longing for the old days thinking to fr-041:debris ( https://www.youtube.com/watch?v=tq2llbP52Zo ) 7:20 minutes of awesomeness in less than 199 Kb.
BTW, I just google it and apparently there is plenty of events going on... Coming very soon: https://www.assembly.org/summer19/
I agree that it's probably not practically useful. But it's a brilliant hack!
Interestingly, there is modern OS in the same space. That's UEFI. Unti I played with it a few months ago, I thought it was some mysterious firmware-adjacent black-box. But actually it's just an OS, very similar to DOS (though it runs in protected mode).
It has a shell and some basic built-in commands including text editors and such. And most importantly it lets you run executables that a stored on a FAT (well, FAT32) filesystem.
The name BootOS could very well describe UEFI. And equally, a slightly more capable version of BootOS could serve as (very underpowered) UEFI replacement.
So, although I am not planning to switch my laptop to running BootOS, I think there are some significant things BootOS can do that UEFI can't.
What's this then?
bootOS programs: (Oh yes! we have software support)
fbird https://github.com/nanochess/fbird
Pillman https://github.com/nanochess/pillman
invaders https://github.com/nanochess/invaders
bootBASIC https://github.com/nanochess/bootBASIC
And one can test the image:"find a pre-designed disk image along this Git with the name osall.img"
Also note the "system" command which returns you to the "shell" of BootOS. It works!
I did not know that bootOS had one, but it does not surprise me given everything else I read on this thread.
You wrote something else:
> Yes, BootOS very much in the same space as MS-DOS, although leaning even further on the "less-is-more" axis. It does the same basic things (though I suppose it doesn't do the BASIC thing).
I thought I caught the error and deleted the erroneous response in time. But I didn't.
1. Flash boot os on the boot sector, place any iso/img file on the stick.
2. Boot from the stick
3. select the iso you want to boot
Don't know it this is possible though... (I know that there is a emulation mode for virtual cd drives in the bios but thats about it...)
It's not 100% compatible with every ISO, but it's definitely possible to boot more than one thing from a single USB drive.
I used to have a 2.5 enclosure that supports this in hardware (Zalman ZM-VE300) but selection of ISO is done on-device before booting. I don't see any reason you couldn't build a hardware/software combo where selection on-screen made the USB hardware mount the selected ISO as a new logical device and then booted it.
[1]: http://www.zalman.com/contents/products/view.html?no=212