All work

04 / Official maintainer · 2 ROMs

CipherOS & DerpFest

My stock ROM stopped getting updates in school, so I started flashing custom ones just to keep up. That turned into two years as an official maintainer, building and shipping releases from source for a device the manufacturer had moved on from.

Role
Official maintainer, 2 ROMs
Stack
AOSP, Linux Kernel, msm8953, Jenkins
ysl · msm8953
$ . build/envsetup.sh && lunch cipher_ysl-userdebug
CC arch/arm64/kernel/smp.o
CC drivers/gpu/msm/adreno.o
CC drivers/power/supply/qcom/qpnp-smb2.o
CC net/ipv4/tcp_output.o
DTC arch/arm64/boot/dts/qcom/msm8953-qrd-sku3.dtb
CC kernel/sched/fair.o
CC drivers/input/touchscreen/ft5435.o
LD vmlinux.o
OBJCOPY arch/arm64/boot/Image
GZIP arch/arm64/boot/Image.gz
CAT arch/arm64/boot/Image.gz-dtb
Kernel: arch/arm64/boot/Image.gz-dtb is ready
[ 98% 41203/42015] Building with Soong
Package Complete: CipherOS-ysl.zip
#### build completed successfully ####
$ . build/envsetup.sh && lunch cipher_ysl-userdebug
CC arch/arm64/kernel/smp.o
CC drivers/gpu/msm/adreno.o
CC drivers/power/supply/qcom/qpnp-smb2.o
CC net/ipv4/tcp_output.o
DTC arch/arm64/boot/dts/qcom/msm8953-qrd-sku3.dtb
CC kernel/sched/fair.o
CC drivers/input/touchscreen/ft5435.o
LD vmlinux.o
OBJCOPY arch/arm64/boot/Image
GZIP arch/arm64/boot/Image.gz
CAT arch/arm64/boot/Image.gz-dtb
Kernel: arch/arm64/boot/Image.gz-dtb is ready
[ 98% 41203/42015] Building with Soong
Package Complete: CipherOS-ysl.zip
#### build completed successfully ####

01The problem

My phone, a Redmi S2/Y2 on the msm8953 chipset, stopped getting updates almost as soon as I owned it. That is an ordinary complaint. What made it stick was that flashing a custom ROM to fix it turned out to be more interesting than the phone itself: the whole build, AOSP source down to the kernel, was open, and nobody was shipping a build for this specific device that felt current.

Flashing led to building, and building led to being asked to maintain. I ended up an official maintainer on two ROM projects for the same device at once.

02What maintaining a ROM meant

  1. Kernel

    Compiled from source for every release, tracking upstream security patches and folding in the device-specific drivers the stock kernel never shipped.

  2. Device tree

    Kept current for msm8953, the chipset class the Redmi S2/Y2 shipped on, so a build correctly described the display, radio, and sensors to everything running above it.

  3. Build & release

    A Jenkins pipeline built and packaged from source. Each release picked up whatever had changed upstream since the last one, not a fixed feature list.

  4. Community

    Releases went out to whatever remained of the device’s owner base, alongside a distributed maintainer team across two ROM projects, with bug triage happening in the release threads themselves.

03Result

Official ROMs maintained at once, CipherOS and DerpFest
2
Downloads per release, on a device its maker had stopped supporting
2,500+
Active maintenance window
2021-22

04Where it stands now

Custom ROMs as a hobby are basically dead. Manufacturers ship longer support windows now, bootloaders lock down harder, and the phones worth flashing stopped being worth flashing. I do not think that is a loss to mourn, it is just what happens when the problem that pulled me in gets solved a different way.

What it left me with was not the ROM. It was being comfortable reading kernel source, debugging a build that fails with no stack trace to point at, and shipping something a few thousand strangers actually downloaded, before I had written a line of production web code.