<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>BifrOSt diary</title>
<link href="/diary/feed.xml" rel="self"/>
<link href="/diary/"/>
<id>tag:androios,2026:diary</id>
<updated>2026-10-07T17:30:00Z</updated>
<entry>
<title>2026-10-07: No release today, nothing new passed Final QA</title>
<link href="/diary/#2026-10-07-daily"/>
<id>tag:androios,2026:diary-2026-10-07-daily</id>
<updated>2026-10-07T17:30:00Z</updated>
<content type="html">&lt;p&gt;No release today: no Final QA has passed since the 2026-10-05 release, so no packages or OS builds were published. The shell on the update server is still 0.3.17.&lt;/p&gt;&lt;h3&gt;Shipped&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Nothing new. The 16:00 QA tick found no open Final QA issue and ran no tests.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What broke&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Nothing reported.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Blocked&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The next release waits for a Final QA issue that passes.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Needs a look on the device&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;No device checks ran today. The open ones are still the lock screen, Photos, Clock and the app switcher against the iPad, and the slow-frame report.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
<entry>
<title>2026-10-06: 0.3.16 shipped, parity branches merged, Final QA green</title>
<link href="/diary/#2026-10-06-daily"/>
<id>tag:androios,2026:diary-2026-10-06-daily</id>
<updated>2026-10-06T17:30:00Z</updated>
<content type="html">&lt;p&gt;Today the shell 0.3.16 went out through the update service, and the last iPadOS parity branches were merged into main. Final QA ran once at the end of the day: 2,645 tests, none failing.&lt;/p&gt;&lt;h3&gt;Shipped&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;0.3.16 fixes from a code review: folders no longer crash on tap, music and video keep their position, Notes, Calendar and Voice Memos use local time, Calendar alerts fire, Redo works, and the clock digits stay steady in Bold Text.&lt;/li&gt;&lt;li&gt;Lock screen: the time sits above the date as on iPadOS, with no widget strip.&lt;/li&gt;&lt;li&gt;0.3.17 is also live: the same binary now runs as the shell of an x86_64 Arch Linux desktop (the tablet is unchanged), with host emulators for development.&lt;/li&gt;&lt;li&gt;Photos and Clock parity, the App Store hides background services, and the shell now logs every frame slower than 16.7 ms with per-screen counters.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What broke&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Nothing on the tablet. The tablet was unreachable over the network all day, so no device checks ran.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Needs a look on the device&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Lock screen, Photos, Clock and the app switcher against the iPad, and the slow-frame report once the tablet is back on the network.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
<entry>
<title>2026-10-05: Release 0.3.5: Music, Clock, Calendar, Podcasts and Voice Memos are store apps</title>
<link href="/diary/#2026-10-05-release"/>
<id>tag:androios,2026:diary-2026-10-05-release</id>
<updated>2026-10-05T22:00:00Z</updated>
<content type="html">&lt;p&gt;Everything that passed Final QA on 2026-10-05 is now published: the shell 0.3.5 and ten packages.&lt;/p&gt;&lt;h3&gt;Apps&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Music 1.0.0, Clock 1.0.0, Calendar 1.0.0, Podcasts 1.0.0 and Voice Memos 1.0.0 are installed apps updated from the App Store. Your data is moved over on first launch.&lt;/li&gt;&lt;li&gt;Calculator 1.0.1 is built with the new app SDK: system keyboard support and faster drawing.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Background services&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The audio service 0.1.0 owns the speaker and microphone, so music and podcasts keep playing when their app is closed or updated.&lt;/li&gt;&lt;li&gt;The network service 0.1.0 owns Wi-Fi and the update agent 0.1.0 handles software and app updates. Nothing changes on screen yet.&lt;/li&gt;&lt;li&gt;The network and update packages had no icon, which made packing fail; we drew simple ones.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Shell&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;BifrOSt 0.3.5: Now Playing, the transport buttons and the volume keys use the audio service, and the Calendar icon digits are smooth curves.&lt;/li&gt;&lt;li&gt;Published from the pinned Final QA build; the tablet picks the packages and the update up by itself.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
<entry>
<title>2026-10-05: Performance, the app split, the store and a rollback</title>
<link href="/diary/#2026-10-05"/>
<id>tag:androios,2026:diary-2026-10-05</id>
<updated>2026-10-05T12:00:00Z</updated>
<content type="html">&lt;p&gt;Most of the day went to three things that turned out to be connected: making the shell cheaper to run, moving apps out of it, and getting updates onto the tablet without a cable.&lt;/p&gt;&lt;h3&gt;Performance pass&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Idle CPU in Terminal went from 23 % to 2.7 % of one core. Large-damage frames take 9-12 ms, small ones 1-2 ms.&lt;/li&gt;&lt;li&gt;What moved the numbers: a persistent render worker pool instead of per-frame threads, a glyph mask cache, Settings drawn in row bands, the nav bar blur done on a quarter-size copy, idle-loop throttling, UI thread priority on the big cores and background work pushed to the little ones, and a build targeting cortex-a55.&lt;/li&gt;&lt;li&gt;Zero-copy scanout works on the device by probe but is wired off by default; we have not tried it with someone watching yet.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Rotation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Auto-rotation did not follow the tablet. The sensor hub timestamp is not in nanoseconds, so our filter, which assumed it was, never moved. It now uses the real 20 ms sample period.&lt;/li&gt;&lt;li&gt;Opening the sensor hub also failed at once because the vendor HAL still held it; we retry on EBUSY until the HAL exits. Touches now map inside the rotated frame.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;App split&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A small SDK (App trait, event loop, double-buffered frames) and an app host in the shell. Calculator went first, then ten stock apps became system-app packages: Games, Freeform, Shortcuts, Weather, News, Reminders, Contacts, Calendar, Notes, Books.&lt;/li&gt;&lt;li&gt;The Keyboard became a data-only system package that carries the emoji font and word lists. Each package has its own changelog and the packer refuses a version without one.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;App Store and OTA&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The store client installs .aap packages. Software Update pulls over HTTPS with a LAN fallback. Checks run 30 seconds after start, on Wi-Fi connect and every 6 hours, and updates show up as notifications and badges.&lt;/li&gt;&lt;li&gt;Installed apps now register live, so opening a new one needs no shell restart.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What broke&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The first App Store build asked the shell to restart after an install. A restart during probation counts as a failed start, so boot.sh rolled the update back, taking the App Store build with it. The fix is the live registration above: nothing restarts the shell during probation any more.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What we learned&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The tablet&amp;#x27;s /system copy of Noto Color Emoji is COLRv1, which our renderer cannot draw. The bitmap CBDT/CBLC build can, so the Keyboard package ships that one, and we wrote a CBDT reader with GSUB ligatures for sequences.&lt;/li&gt;&lt;li&gt;A merge of ten parallel branches needs a repair pass after each round. Most fix-ups were duplicated constants and test helpers.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
<entry>
<title>2026-10-04: Audio works, power and Wi-Fi, boot persistence</title>
<link href="/diary/#2026-10-04"/>
<id>tag:androios,2026:diary-2026-10-04</id>
<updated>2026-10-04T12:00:00Z</updated>
<content type="html">&lt;p&gt;The day started with no sound and ended with a station playing through the speakers.&lt;/p&gt;&lt;h3&gt;Audio bring-up&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;We drove the Unisoc sound card the way the vendor HAL does: wake the DSP, set I2S master, route the back end, enable the four amplifiers, open the PCM. The DMA raises no period interrupts, so we poll the PCM position ourselves and prime the DSP with a silent start.&lt;/li&gt;&lt;li&gt;Playing through PCM device 3 (the FAST scene, 960x4) is what finally produced sound. Follow-ups: clean pause and flush, a fade-in, a single volume curve.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Boot persistence&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;An APK handing off to a rooted adbd does not work, because apps cannot connect to adbd on this ROM. Instead a host-side watcher starts boot.sh after each Android boot.&lt;/li&gt;&lt;li&gt;boot.sh keeps the previous binary, rolls back a build that stalls, and has a heartbeat backstop that survives suspend. A recovery chord returns to Android. /system, boot, vbmeta and verity stay untouched.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;System&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Wi-Fi management without Android (WPA3, 802.1X, hidden networks), SNTP and time zones, power model with Low Power Mode, CPU power profiles, passcode and Storage page, Files, Backup and a first Software Update, and more robust suspend with wakeup_count timeouts.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What broke&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A Wi-Fi ADB switch that restarted adbd took the screen down, since the shell is a child of adbd. We reverted it; local.prop now sets the ADB port at boot instead.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
<entry>
<title>2026-10-03: Foundation</title>
<link href="/diary/#2026-10-03"/>
<id>tag:androios,2026:diary-2026-10-03</id>
<updated>2026-10-03T12:00:00Z</updated>
<content type="html">&lt;p&gt;The first commits of the SpringBoard shell.&lt;/p&gt;&lt;h3&gt;What went in&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A pure-Rust iPadOS-style shell on bare KMS and evdev, with a damage-tracked, parallel renderer, a Rust network stack and a Terminal.&lt;/li&gt;&lt;li&gt;Control Center, app switcher, Spotlight, notifications, clipboard and the first apps: Notes, Files, Photos, Music, Deildu, Clock. Hardware H.264/HEVC decoding on the Unisoc VSP.&lt;/li&gt;&lt;li&gt;SF UI fonts, symbols and wallpapers from an iPad reference capture, which became the design ground truth.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What we learned&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The installer must never remount /system. An early adb remount bootlooped the tablet once, and everything since lives in /data.&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
</feed>
