I still refuse to give in to Android and other “modern” smartphone operating systems. Read my about page to get an idea why I dislike them.

Consequently, I have planned to create my own perfect mobile phone GNU/Linux distribution for several years. My focus has shifted a lot from a statically compiled base distribution with carefully crafted base packages (basically sabotage) over an all-crypto phone, that would only work over Wifi and protect metadata (something like Ricochet) to what it is now.

I still want to have all the good crypto stuff, but at the same time, I personally need a phone that “just works” with the uncrypted legacy systems. That is, making normal phone calls and writing SMS. I’d rather do that from a proper GNU/Linux phone, than from a normal phone over which I have even less control.

So I have started with the basics - getting a normal GNU/Linux usable on the phone. With phone, of course, I mean the N900 and with GNU/Linux I have decided to go with debian900. The latter choice was made, because there aren’t many real GNU/Linux distributions, that somehow can work on the N900. Arch Linux ARM on N900 was promising, but it is unmaintained as of now - and unlike the debian900 scripts, it relied on adding an extra repository with the kernel in it, rather than providing a script, that just builds the latest kernel with N900 patches from source.

Some notes about Debian - I will definitely keep it supported with my project (because it should run on all distributions), but I might switch to another distribution as base system at some point. I like, that Debian made the most progress on reproducible builds so far, and how many pre-packaged applications there are. However, I am not a huge systemd fan and I find it incredibly hard to write Debian packages compared to Arch PKGBUILDs, sabotage recipies and Void Linux whateveryoucallthembuildscripts. So I might switch to Void in the long run.

Back to topic. I write this blog post, because I have released the first public version of penguinphone. On GitHub and in the forums. Right now, it extends i3 (yes, the tiling window manager) with touch buttons and menus to launch and switch applications, and for closing the currently running application. Doesn’t sound like much yet, but it comes with a nice, minimal development environment (Xephyr, run another X server inside your X server) and has highly efficient C code and everything valgrind-tested. And it will be compatible with Wayland, once sway gets the necessary features!

I really think, that it’s a start. And I felt like I needed to release this, before I start working on the SMS and phone calls part. Because that will be a whole lot more complex and it will take even more time, until there’s something to show off. I plan to wrap SMS and calls with a XMPP gateway and use the Python program Gajim or any other XMPP client, that supports the Jingle extension, as an interface.

Trivia: When I posted my project in #neo900 on freenode IRC, user bencoh pointed me to an interesting dead project, that had similar goals: FreeNIT

So if all this interests you, go ahead and try penguinphone on your GNU/Linux desktop. It’s really easy, git clone, make testenv and you have a little X server window inside your normal X server, ready with the full environment to play with.