23 Dec 2025
With the rise in popularity of Linux and reading a lot about people’s first experience with Linux, I thought it would be fun to reflect on my journey to Linux as well. :)
The Prelude
I got my first Android phone ~2012, plus or minus by a year. It was the Samsung Galaxy Express SGH-I437.
Now why am I starting with Android, it’s not even proper Linux! Well, dear reader, you’ll see how important this was into discovering Linux (or as I like to call it GNU/Linux… lol, sorry couldn’t help it)
At the time, it did its basic functionality well: calls, text, and (most importantly) games :P. AMOLED, battery life that could last a day, 4G LTE, man, this phone is a very solid device even compared to modern standards.
At this point in time, however, Android was notorious in only supporting phones for a year or so before stopping updates altogether. Planned obselecence was as much of a problem a decade ago as it is now unfortunately. I hope this changes.
Anyways, I was hoping that Samsung would atleast provide one more update to at least get it to Kitkat instead of remaining on Jelly Bean. Around 2014 (some time after the release of Lollipop), I got tired of waiting, and decided to just search to see where I could get the Kitkat update as Lollipop had released.
The Start
I had just switched to an iPhone, so my old Android phone sat there unused. Perfect for experimentation!
I started with the Tasker app, got root (via a sketchy binary lol), and was just exploring cool Android apps that could enhance my functionality. But I still wanted that Android update. ~2014/2015, that’s when I discovered Cyanogenmod. For those that don’t know, Cyanogenmod was the Android fork before LineageOS. And someone made a Lollipop version for the Expressatt!
The bootloader came unlocked (lol to the phones of today that come locked) and after a quick flash of Clockwork Recovery Mod and Cyanogenmod, I was up and running.
Man, was that such a cool experience. If I remember correctly, I had skipped Kitkat and jumped directly to Lollipop. Wow!
The phone ran buttery smooth, as there was no bloatware in it anymore. Running Clash Royale for example ran more smoothly than my iPhone at the time. And it looked great with an AMOLED screen. Side note: I think the Super AMOLED technology that Samsung developed at the time was revolutionary. Unfortunately, most customers started counting pixels as a metric for quality, and I believe that’s what caused it to fall to the wayside. But to be honest, the Expressatt’s AMOLED still looks as good as my modern iPhone 14, even if it’s pixel density is lower. I wonder if there is another metric for a screen quality besides pixels.
The year after that, a new Android version had just released. And I wanted it. At this point I had started looking into how LineageOS was developed and learned more about AOSP and ChromeOS, which I wanted for my computer. Unfortunately, I couldn’t find a way to download ChromeOS onto my computer (at this point I had my fair share of viruses, and wanted to stick to official stuff) so I decided to skip it for now. I still hadn’t heard about Linux and was still daily driving Windows.
As time passed, it seemed like Samsung had given up entirely on the phone. Well, why not try to build it myself?
The Stumbles… and Discovering Linux
Oh man, what a mistake that was lol. It would take some time before I realized that the kernel version for my device was too old for it to be compiled with the (at the time) latest Android version. I kept getting obscure error messages, trying to solve them, and getting stuck. I was desperately trying to try and find someone who could help me get the latest Android running. Talked to AKLU on his thread on the XDA Forums and that’s around the time he started his YouTube channel (a bit sad to see he last posted around 4 years ago). Also talked to Fat_tire who made exceptional tutorials such as this one. I also made a blog post where I complained how hard it was trying to figure out what was going wrong. I had made a pen pal with something_sithy (he had 2 usernames, but something_sithy is the only one I remember), and lol, thinking back, I must’ve bothered him so much with my complaining XD. Wouldn’t be surprised if that’s why he eventually stopped blogging as well, haha.
I guess my first real Linux distribution was Ubuntu 14.04, although I still didn’t know what Linux was at the time. I just installed Ubuntu onto a spare hard drive and used it to build LineageOS (while always failing) and switching back to Windows as my daily driver.
But through something_sithy, I had discovered postmarketOS, a Linux distribution for phones. What is that?
I explored it for a bit, and found that they had made a guide to port postmarketOS onto your Android phone. Woah, okay, let me try that. I was hitting road blocks, some stupid stuff (like downloading the webpage instead of the config for the linux kernel, as I was unfamiliar with git at the time) and some non-trivial stuff (some LineageOS kernels were broken and it wasn’t clear why). But after talking to postmarketOS folks (this is when I first talked to people like Alexey Min), I actually got it working! The screen was working with Weston too (though it was red, and I’m not too sure why)!
I didn’t switch completely to postmarketOS at the time. I was still adamant on getting LineageOS working for my device. It was featureful compared to postmarketOS and in the kernel list, I saw that expressatt should also be working for LineageOS!
Unfortunately, I just never got that to work. Builds would take almost an entire day only to get an obscure error somewhere in the stack. It was around this time where I found a vague blog article saying how Android only works until a certain Linux kernel version. Now knowing that, I complied Cyanogenmod 12.1 for my device, and finally called it quits for Android.
Onto Linux!
However, I still hadn’t given up on Expressatt as a whole! Somewhere between 2016-2018 is where I discovered Linux, and decided to learn more about it. I have to credit postmarketOS here as that’s where Linux was mentioned a lot, and that’s where I first started looking into it. ~2018 is when I first switch to my first Linux distribution, which was Manjaro! I wanted it to look and feel as similar to Windows so that the transition wouldn’t be too hard, and Manjaro was one of the popular distros shipping with KDE Plasma.
Manjaro was a bad choice for a beginner. Updates would frequently break my desktop and the forums were extremely hostile. My posts are probably still there “anonymized” even though I asked to delete it permanently (GDPR/CCPA requires that). I quickly switched to Linux Mint after a year or so to get something stable. Linux Mint is a very solid choice: lots of tutorials online and very beginner friendly.
I remember in the beginning being confused about simple stuff. One of the funiest memories I have is when I first ran a sudo command. When I was typing my password, there was no indication that my password was being inputted, haha. Figured out a day later that it was expected because then other’s don’t see your password as you type it.
In the meantime, I was also trying to get mainline Linux running on my device(s). There were 2 major hurdles that I faced, but overall it went something like this:
- First major hurdle, trying to get mainline Linux to even run on the Expressatt. There was no indication whether mainline Linux was booting or not, and I spent months trying to ask people on Matrix how to even get this working. As this was my first time with Linux development, at one point I compiled the linux kernel as root! A rite of passage, one might say :P. The reason it took so long was that the framebuffer is disabled by the bootloader and the old Cyanogenmod kernel uses board files instead of DTS. I finally got a sign of life after a lot of trial and error. I could finally see UART output on my raspberry pi UART setup! Lucky guess! :P
- I was able to boot only up to a certain point, and then the console would freeze. At the time didn’t know why that was happening, but the debug console worked for the Expressatt. After a bit of trial and error (reading the board file and translating that to a DTS), I then got the touchscreen working!
- David mentioned that I could partially upstream my work to mainline Linux. I sent a big patch upstream, which made one maintainer especially mad (lol in hindsight, but yikes at the time), but after a bit of a back and forth, I got Expressatt in!
- I got the Pinephone Pro ~2022/2023 and wanted to use it as my daily driver. Unfortunately seems like there was a public fallout between the people developing the kernel and the company, so progress stalled. It’s unfortunately in my drawer for now still (though I’m slowly upstreaming those patches in between development of Expressatt).
- I also discovered that the Surface RT was also supported by postmarketOS and got that running. :)
- I switched to using Alpine Linux as my desktop OS. Very nice, and hope to write a review about it one day. :)
- Got a bunch of spare Android phones where I hope to one day port postmarketOS to.
- Second hurdle came when I tried to continue boot past the debug shell. At the time I needed to use i2ctools, and it wasn’t working in debug shell. I thought it was because the kernel was too big. I was very close to quitting, but Sam finally told me I was missing a BAM node (basically handles memory accesses for the CPU) and it worked!
- In pmaports, got Expressatt running on mainline Linux kernels (linux-next, linux-stable, and linux-lts)
- Discovered that mainline Linux had introduced a regression. All I had to do was report it, kick my feet up, and test the solution once someone figured it out! :)
- boot.img started to bloat up for Expressatt, so finally installed lk2nd (again) to the BOOT partition as it was finally supported in the main branch
- Tried to manually convert the board file to DTS for the touchkey and NFC. Both were upstream, but I was struggling to get it working. Some months passed, and finally caved into AI, and man did it speed me up. I got touchkey, vibrator, NFC, accelerometer, light sensor, and gyroscope working in a couple weeks. rva3 got Wifi/bluetooth and op tables working for a related SoC (MSM8227 I believe), so I’m hoping I can bounce off AI and rva3’s progress to get that working too.
- Discovered that the PS3 and Wii can run Linux o_O. postmarketOS port soon?
- I’m writing this blog post :P
There were a lot of people behind this journey. Here are some of the ones that were notable to me:
- David Heidelberg maintained the APQ8064 kernel tree, which he told me to also use for MSM8960. Started using this for mainlining. He was also the person to tell me to upstream stuff directly to mainline.
- Casey Connolly was making massive progress on the OP6, and she was my inpiration to continue even when I was getting frustrated with my lack of progress. Very nice progress on pmbootstrap and took postmarketOS to the next level.
- Martijn Braam was doing amazing work for postmarketOS at the time and his contributions to Pinephone Pro can’t be understated.
- Megi for developing and maintaining the Pinephone Pro kernel.
- Clayton Craft for his work on immutablility and for asking if I would like to be a trusted contributor (wouldn’t have considered it otherwise).
- Pablo Correa Gómez: worked with Pablo to get postmarketOS’s first official distributor onboarded.
- Luca Weiss, don’t remember exactly why I started following him, but his progress on Fairphone is amazing.
- Alexey Min for helping me get started with Linux kernel development (GPIO keys blog).
- Sam for helping me figure out that BAM was missing from the MSM8960 DTS node. After a couple of long years, I could finally get the phone to boot to the login screen!
- Toonis for also helping me with Linux kernel questions and for his blog
- ichernev for his blog
- peremen, rva3: for helping bounce ideas for MSM8960
- Minecrell and travmurav: for lk2nd development for the MSM8960
- and too many more people I would like to thank for the one off help and for making postmarketOS what it is today
I might be forgetting some things and others might be a little bit out of order, but if you really cared about the history, you can look at the pmbootstrap, pmaports, linux, and matrix history to see all the changes either under my name or changes related to expressatt (for a brief time, I went under a pseudoname).
Now
I think it’s important for me to document my mainlining progress. I’ve started blogging about small status updates on features I get working. I also made a Mastodon thread to do quick updates for when a blog doesn’t make sense.
So far I’m enjoying contributing to FOSS, but sometimes it feels lonely. There are people I correspond to online, but I think it would be nice to join a physical hackathon and see other’s progress. Maybe I can also get work where I’m paid to contribute to FOSS as well. I’m sure one day I will be able to, and the day that happens, I will be super happy. :)
Another thing I would like to see improved is the documentation for Linux and FOSS projects. I would love to contribute, but it feels like most of the ideas are locked behind company doors and that the ladder has been pulled up just beyond my reach. That’s why I’m a little happy for AI’s existence. It can analyze the massive codebase to give a good pointer on where I should look at. It’s also very helpful for it to develop a working patch, and all I would have to do is clean that patch up, upstream it, and iterate based on what the maintainers say. It helps stop me from getting frustrated and actually helps me make progress, instead of asking in a Matrix chat and being ghosted, or even worse, made fun of.
Really excited for the future of Linux and FOSS. I’m glad to be a part of it. Thanks for reading all the way through. :)