Firefox OS (FxOS) codenamed Boot2Gecko (B2G) was a mobile operating system from 2013–2015 where the Linux kernel booted into a Gecko environment. After a lack of success, it was shutdown and a community fork B2G OS emerged. B2G OS is the basis of the closed-source KaiOS, a popular OS on feature phones. Capyloon is AGPL.
GerdaOS was recently unfrozen as a fork for the Nokia 8110 as well.
It would be nice to see more FOSS tinkering in the ‘dumb’ phone space as folks seek to drop their smart phones. I’m not sure what omen IPFS means on Capyloon, but they are running on multiple devices. I wanted FxOS to succeed in the past as I found Java too cumbersome to deal with for Android, and JavaScript + web tech can theoretically all you to right your app once and get a decent enough experience on multiple platforms.
The cool thing about Java isn’t the language, it’s the JVM, and there are lots of languages that run on it. These days Android dev seems to be moving toward Kotlin, which looks like a much better language. I’d love to be able to use Kawa Scheme to develop for Android, which should be possible in theory, but …
The dev tooling around Android and Java is another matter. It all seems so very baroque. And getting anything done without an IDE is difficult. I feel like I have to sacrifice seven goats on a night of the full moon just for the equivalent of hello world. Which is why I never went very far with Android development.
The cool thing about my CPU’s ISA is that there are lots of languages that target it. If the first thing that you want to do with a CPU is make it emulate one with a very different abstract machine then something has gone wrong somewhere.
How’s the language interop with that CPU’s ISA?
If you buy into the JVM, you get a huge standard library of existing Java that is usable from other languages. Then there are the numerous 3rd party libraries. You get some measure of safe interoperability, too. Whereas on Unix, if you want to call something written in another language, you’re going to have to go through C. That necessarily adds unsafe components to an otherwise memory-safe environment.
I’m not trying to sell the JVM, but I do see what makes it attractive as a target.
All of them?
Last time I checked, there were over ten billion lines of C/C++ code available in open source repos, but closer to one billion in all of the JVM languages added together. Objective-C had only around three hundred million lines, but could interoperate trivially with all of the C/C++ code.
Even the preamble to the section on the JNI spec says that it doesn’t even bother trying to validate anything because all bets are off as soon as you call native code, so you get the appearance of safety, not any of the reality. I have implemented a sandboxed version of the JNI, but it requires CHERI hardware and that isn’t exactly mainstream yet.
In 2013 there were a few less options. Eta was cool while it lasted, and I don’t think I’ve heard of any MLs on the platform, like how CLR has F#.
Wait, what happened to Eta?
Kotlin is probably a good enough ML when used in certain strict ways (sealed data classes allow discriminated unions and matching, Arrow can provide useful monads, etc.) that we won’t see something like F#. Honestly, if C# 11 had been C# 2, I don’t know if we’d have F#, either (though I’m very happy we do!).
The Eta compiler hasn’t been touched in years (CLAs don’t usually help either).
I don’t know much about Kotlin, but even if it has ML inspiration, the aesthetics and feel aren’t there (curly blocks, functions need
()
,.
method calls, no first-class pipe/compose operators, sealed class is not the same feel as (G)ADTs). It’d be a hard sell to a lot of folks that it’s good enough.