Booting to Rust
blog.theincredibleholk.org
blog.theincredibleholk.org
In highschool, I wrote a tiny toy kernel, running solely in 16bit real mode. Quite fun, but I wanted to go further and my knowledge was lacking, although the project did help me learn a lot of ASM.
The OP has shown that I could do all sorts of cool stuff going straight into x64 without all the incantations! That's actually super exciting, and makes me hate EFI a little less ;)
I'm going to go play, I think! I wonder what Lisp would be the best candidate here...
http://www.ocp.inf.ethz.ch/wiki/
There are still some students and external guys keeping the ports going.
http://www.ocp.inf.ethz.ch/forum/index.php/board,4.0.html
Nowadays, I think Oberon spirit will live in Rust, D, Go, C#. :)
In terms of the language, the Oberon 2 language report is 17 pages of which 1.5 pages is the full EBNF for the grammar.
Then again, looking at the new stuff from the people keeping Oberon alive, it seems much less interesting to me as well.
I did like Oberon a lot, as a GC enabled safe systems programming language with module support, and the ideas of Native Oberon exploring Smalltalk dynamism in a static compiled language.
As for Wirth's minimalism, specially the latest Oberon-07, I don't like it that much.
D - Xomb - http://wiki.xomb.org/index.php?title=Main_Page
Go - TinyGo - http://code.google.com/p/tinygo/
C# - Singularity - http://singularity.codeplex.com/, Cosmos - http://cosmos.codeplex.com/
The main problem is lack of support, it is a very big effort to create an OS and it is very easy to turn attention to other stuff.
Linux and BSD distributions wouldn't have reached the state they enjoy nowadays, without the help of the existing UNIX toolset and investment of companies interested in seeing the projects succeed.
[1]: https://github.com/mozilla/rust/pull/10527 not yet landed.
I heard that fact in a linux.conf.au talk by the guy what did UEFI work for linux [0]. If you're sad to hear about the Microsoft influence, dude isn't too hot on the implementation of this new standard in general. Interesting talk though, digging up the link to post it here means I'm going to give it another watch.
[0] EFI and Linux: the future is here, and it's awful - Matthew Garrett http://www.youtube.com/watch?v=V2aq5M3Q76U
Surely all the patents on FAT have expired by now regardless. Even FAT32 was introduced 17 years ago.
All in all: It's probable that Microsoft influenced the standard here, but there's also sufficient technical reasons for those choices. There's other places where Microsofts influence on the standard is a much bigger problem.
Yes, the problem is those which were specified.
> The calling conventions, the binary format and UTF-16 are widely supported across platforms and known.
The calling conventions are W64's, which is by far the least common across platform (especially since the AMD64 ABI defines calling conventions)
> UTF-16
Is a shit encoding and there is no justification for such a technical low-level API to use it[0].
> UTF-16 is used in different places as well, notably in Java.
Not a justification (unless you also assert that most UEFI applications will be written in Java), explained by Java (and Windows NT) having standardized their Unicode implementation between Unicode 1.0 and Unicode 2.0, 20 years ago. UEFI was not created 20 years ago, that it bears the trace of that event is a disgrace.
Plus technically Java does not use UTF-16, it's UCS2. Support for astral plane codepoints and APIs taking surrogate pairs in account were only introduced in JDK 1.5, separately from the old UCS2 APIs (including char, which remains a code unit)
> It also has the major advantage of being a fixed width encoding over UTF8.
You're high as a kite[2], UTF-16 is no more fixed-width than UTF-8, and UTF-16 implementations are far more commonly broken than UTF-8 ones as 1. astral planes support is rarely exercised and 2. they have to contend with the UCS2/UTF16 duality.
> All in all: It's probable that Microsoft influenced the standard here, but there's also sufficient technical reasons for those choices.
I assert that there is no technical justification whatsoever for the choices of calling conventions and encoding beyond "it's how Windows works and we couldn't be arsed to do things correctly".
[0] the only potentially acceptable justification for UTF-16 is low-markup asian script[1] with a vast majority of codepoints living in the upper segments of the BMP (U+0800 to U+FFFF) and encoded as a single UTF-16 code unit but as 3 UTF-8 code units. This is pretty much irrelevant to UEFI.
[1] mostly, some african and american scripts also live there
[2] no seriously, personal attacks may be bad but when you assert UTF-16 is a fixed-width encoding — even ignoring that Unicode makes the concept laughably useless — you're in a separate plane of reality than just about all of humanity.
Well then I've got good news! EFI, too, also means UCS2 when it says UTF-16 in the spec.
GoFY (which hilariously I'm a contributor on) was probably the closest analogy; it booted on x86. Russ Cox's did as well, but it was removed from the go tree years ago when it bitrotted.
Really it boils down to 1) custom linker scripts/targets and 2) a custom "OS" target that emulates syscalls/etc
I've done it a couple times (on ARM-based embedded devices), I end up throwing it out every time. Should get a proper writeup I suppose.
I remember from the OSDev wiki that the only way to get a processor in 64 bit mode was by first turning on virtual memory. I remember because I was disappointed by that, it seems unnecessary.
Doesn't UEFI play by these rules, or am I misunderstanding?
This is just a guess, but I'd wager that UEFI has the MMU enabled, but with an identity mapping that maps all virtual addresses to the same physical address.
Source: http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Int...