The CommonsBlog


18 March 2026 Artifact Wave

This week, we got patch releases and an RC for Media3:

  • androidx.gradle:gradle-version-catalog:2026.03.00
  • androidx.gradle:gradle-version-catalog-alpha:2026.03.00
  • androidx.gradle:gradle-version-catalog-beta:2026.03.00
  • androidx.media3:media3-cast:1.10.0-rc02
  • androidx.media3:media3-cast:1.9.3
  • androidx.media3:media3-common:1.10.0-rc02
  • androidx.media3:media3-common:1.9.3
  • androidx.media3:media3-common-ktx:1.10.0-rc02
  • androidx.media3:media3-common-ktx:1.9.3
  • androidx.media3:media3-container:1.10.0-rc02
  • androidx.media3:media3-container:1.9.3
  • androidx.media3:media3-database:1.10.0-rc02
  • androidx.media3:media3-database:1.9.3
  • androidx.media3:media3-datasource:1.10.0-rc02
  • androidx.media3:media3-datasource:1.9.3
  • androidx.media3:media3-datasource-cronet:1.10.0-rc02
  • androidx.media3:media3-datasource-cronet:1.9.3
  • androidx.media3:media3-datasource-okhttp:1.10.0-rc02
  • androidx.media3:media3-datasource-okhttp:1.9.3
  • androidx.media3:media3-datasource-rtmp:1.10.0-rc02
  • androidx.media3:media3-datasource-rtmp:1.9.3
  • androidx.media3:media3-decoder:1.10.0-rc02
  • androidx.media3:media3-decoder:1.9.3
  • androidx.media3:media3-effect:1.10.0-rc02
  • androidx.media3:media3-effect:1.9.3
  • androidx.media3:media3-effect-lottie:1.10.0-rc02
  • androidx.media3:media3-exoplayer:1.10.0-rc02
  • androidx.media3:media3-exoplayer:1.9.3
  • androidx.media3:media3-exoplayer-dash:1.10.0-rc02
  • androidx.media3:media3-exoplayer-dash:1.9.3
  • androidx.media3:media3-exoplayer-hls:1.10.0-rc02
  • androidx.media3:media3-exoplayer-hls:1.9.3
  • androidx.media3:media3-exoplayer-ima:1.10.0-rc02
  • androidx.media3:media3-exoplayer-ima:1.9.3
  • androidx.media3:media3-exoplayer-midi:1.10.0-rc02
  • androidx.media3:media3-exoplayer-midi:1.9.3
  • androidx.media3:media3-exoplayer-rtsp:1.10.0-rc02
  • androidx.media3:media3-exoplayer-rtsp:1.9.3
  • androidx.media3:media3-exoplayer-smoothstreaming:1.10.0-rc02
  • androidx.media3:media3-exoplayer-smoothstreaming:1.9.3
  • androidx.media3:media3-exoplayer-workmanager:1.10.0-rc02
  • androidx.media3:media3-exoplayer-workmanager:1.9.3
  • androidx.media3:media3-extractor:1.10.0-rc02
  • androidx.media3:media3-extractor:1.9.3
  • androidx.media3:media3-inspector:1.10.0-rc02
  • androidx.media3:media3-inspector:1.9.3
  • androidx.media3:media3-inspector-frame:1.10.0-rc02
  • androidx.media3:media3-muxer:1.10.0-rc02
  • androidx.media3:media3-muxer:1.9.3
  • androidx.media3:media3-session:1.10.0-rc02
  • androidx.media3:media3-session:1.9.3
  • androidx.media3:media3-test-utils:1.10.0-rc02
  • androidx.media3:media3-test-utils:1.9.3
  • androidx.media3:media3-test-utils-robolectric:1.10.0-rc02
  • androidx.media3:media3-test-utils-robolectric:1.9.3
  • androidx.media3:media3-transformer:1.10.0-rc02
  • androidx.media3:media3-transformer:1.9.3
  • androidx.media3:media3-ui:1.10.0-rc02
  • androidx.media3:media3-ui:1.9.3
  • androidx.media3:media3-ui-compose:1.10.0-rc02
  • androidx.media3:media3-ui-compose:1.9.3
  • androidx.media3:media3-ui-compose-material3:1.10.0-rc02
  • androidx.media3:media3-ui-compose-material3:1.9.3
  • androidx.media3:media3-ui-leanback:1.10.0-rc02
  • androidx.media3:media3-ui-leanback:1.9.3

Mar 18, 2026


Coding Agents and Developer Security

Coding agents — Claude Code, OpenAI Codex, Mistral Vibe, etc. — are all the rage, and with good reason. At the same time, developers might chuckle at the various stories about people using OpenClaw-type personal agents and running into catastrophic problems, like the agent deleting whole directories unexpectedly. Surely, as we are experienced users of technology, we will not let our agents do silly things like that, right?

Right?!?

Particularly with the current generation of coding agent technology, bear in mind that it is not just you and the agent in the mix. It is also whoever developed the skills, plugins, MCP servers, etc. that you are employing.

It is easy to look at something like a SKILL.md file and conclude “it’s just Markdown”. However, to a coding agent, Markdown is executable code. If the skill convinces the agent to invoke a tool that will delete the contents of your C: drive, your protections are down to:

  • Any “that tool request looks sketchy” defenses that the agent harness (e.g., Codex) has

  • Your own inspection of the tool request, if you have “Ask permission”-style settings enabled

  • The fact that, for the love of $DEITY, hopefully you are not running Windows and therefore have no C: drive

Those first two bullets are weaker protections than you might think. For example, in my light Claude Code experiments, Sonnet 4.6 is more than willing to code-generate a chunk of Python, then ask to invoke python3 to execute it. It is unlikely that the agent harness will intuit whether or not some random block of Python is harmful. So now we’re down to my ability to grok a random block of Python and determine conclusively what it does. 😑

Also, bear in mind:

  • Skills can include “executable code that agents can run”

  • Plugins can register hooks that run JavaScript when the agent harness starts up, at least on some harnesses like Claude Code and OpenCode

  • While a skill may be static, a skill in conjunction with an MCP server or tool execution can be dynamic, reacting to what it sees in your environment (since, at present, MCP is largely limited to locally-run servers)

From a developer security standpoint, it is a scary time. Built-in “Web fetch”-style tools give rogue Markdown the ability to exfiltrate something from your developer machine… which is a statement that would have seem farcical just a couple of years ago. And, once MCP gets expanded to support remote-hosted servers, even more avenues open up for agents to be coerced into sending data from your developer machine to semi-arbitrary hosts.

As I continue experimenting with this technology, I will be trying to keep one eye out for these sorts of security concerns. Hopefully, you will too.

Mar 17, 2026


11 March 2026 Artifact Wave

We got a lot this time around!

The biggest news is that we appear to be getting a third Room, as androidx.room3 is a new artifact group with a long list of multiplatform artifacts:

  • androidx.room3:androidx.room3.gradle.plugin
  • androidx.room3:room3-common
  • androidx.room3:room3-common-iosarm64
  • androidx.room3:room3-common-iossimulatorarm64
  • androidx.room3:room3-common-js
  • androidx.room3:room3-common-jvm
  • androidx.room3:room3-common-linuxarm64
  • androidx.room3:room3-common-linuxx64
  • androidx.room3:room3-common-macosarm64
  • androidx.room3:room3-common-tvosarm64
  • androidx.room3:room3-common-tvossimulatorarm64
  • androidx.room3:room3-common-wasm-js
  • androidx.room3:room3-common-watchosarm32
  • androidx.room3:room3-common-watchosarm64
  • androidx.room3:room3-common-watchosdevicearm64
  • androidx.room3:room3-common-watchossimulatorarm64
  • androidx.room3:room3-compiler
  • androidx.room3:room3-compiler-processing
  • androidx.room3:room3-compiler-processing-testing
  • androidx.room3:room3-external-antlr
  • androidx.room3:room3-gradle-plugin
  • androidx.room3:room3-guava
  • androidx.room3:room3-livedata
  • androidx.room3:room3-migration
  • androidx.room3:room3-migration-iosarm64
  • androidx.room3:room3-migration-iossimulatorarm64
  • androidx.room3:room3-migration-js
  • androidx.room3:room3-migration-jvm
  • androidx.room3:room3-migration-linuxarm64
  • androidx.room3:room3-migration-linuxx64
  • androidx.room3:room3-migration-macosarm64
  • androidx.room3:room3-migration-tvosarm64
  • androidx.room3:room3-migration-tvossimulatorarm64
  • androidx.room3:room3-migration-wasm-js
  • androidx.room3:room3-migration-watchosarm32
  • androidx.room3:room3-migration-watchosarm64
  • androidx.room3:room3-migration-watchosdevicearm64
  • androidx.room3:room3-migration-watchossimulatorarm64
  • androidx.room3:room3-paging
  • androidx.room3:room3-paging-android
  • androidx.room3:room3-paging-guava
  • androidx.room3:room3-paging-iosarm64
  • androidx.room3:room3-paging-iossimulatorarm64
  • androidx.room3:room3-paging-jvm
  • androidx.room3:room3-paging-linuxarm64
  • androidx.room3:room3-paging-linuxx64
  • androidx.room3:room3-paging-macosarm64
  • androidx.room3:room3-paging-rxjava3
  • androidx.room3:room3-runtime
  • androidx.room3:room3-runtime-android
  • androidx.room3:room3-runtime-iosarm64
  • androidx.room3:room3-runtime-iossimulatorarm64
  • androidx.room3:room3-runtime-js
  • androidx.room3:room3-runtime-jvm
  • androidx.room3:room3-runtime-linuxarm64
  • androidx.room3:room3-runtime-linuxx64
  • androidx.room3:room3-runtime-macosarm64
  • androidx.room3:room3-runtime-tvosarm64
  • androidx.room3:room3-runtime-tvossimulatorarm64
  • androidx.room3:room3-runtime-wasm-js
  • androidx.room3:room3-runtime-watchosarm32
  • androidx.room3:room3-runtime-watchosarm64
  • androidx.room3:room3-runtime-watchosdevicearm64
  • androidx.room3:room3-runtime-watchossimulatorarm64
  • androidx.room3:room3-rxjava3
  • androidx.room3:room3-sqlite-wrapper
  • androidx.room3:room3-testing
  • androidx.room3:room3-testing-android
  • androidx.room3:room3-testing-iosarm64
  • androidx.room3:room3-testing-iossimulatorarm64
  • androidx.room3:room3-testing-js
  • androidx.room3:room3-testing-jvm
  • androidx.room3:room3-testing-linuxarm64
  • androidx.room3:room3-testing-linuxx64
  • androidx.room3:room3-testing-macosarm64
  • androidx.room3:room3-testing-tvosarm64
  • androidx.room3:room3-testing-tvossimulatorarm64
  • androidx.room3:room3-testing-wasm-js
  • androidx.room3:room3-testing-watchosarm32
  • androidx.room3:room3-testing-watchosarm64
  • androidx.room3:room3-testing-watchosdevicearm64
  • androidx.room3:room3-testing-watchossimulatorarm64

In possibly-related news, we have more Web support for SQLite:

  • androidx.sqlite:sqlite-js
  • androidx.sqlite:sqlite-wasm-js
  • androidx.sqlite:sqlite-web
  • androidx.sqlite:sqlite-web-js
  • androidx.sqlite:sqlite-web-wasm-js

Beyond that, we got:

  • androidx.camera:camera-common
  • androidx.camera:camera-common-testing
  • androidx.datastore:datastore-tink
  • androidx.datastore:datastore-tink-android
  • androidx.datastore:datastore-tink-jvm
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-desktop
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-iosarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-iossimulatorarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-js
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-linuxarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-linuxx64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-macosarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-mingwx64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-tvosarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-tvossimulatorarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-wasm-js
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-watchosarm32
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-watchosarm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-watchosdevicearm64
  • androidx.lifecycle:lifecycle-viewmodel-navigation3-watchossimulatorarm64
  • androidx.navigation:navigation-common-js
  • androidx.navigation:navigation-common-wasm-js
  • androidx.navigation:navigation-runtime-js
  • androidx.navigation:navigation-runtime-wasm-js
  • androidx.navigation:navigation-testing-js
  • androidx.navigation:navigation-testing-wasm-js

The roster of 1200+ updated artifacts can be found here!

Mar 11, 2026


What If... AI Compute Costs Soar?

Many groups are investing heavily in Claude Code, OpenAI Codex, and similar tools for using generative AI for software development, especially for actual code creation. I have played with Claude Code and OpenCode (for use with local Ollama models), and it is genuinely impressive what they can accomplish. The argument for leaning heavily on genAI is: it is cost-effective. One pundit wrote:

And the economics are deliberately provocative: roughly ten dollars an hour of compute versus a developer’s cost of around $150 an hour.

However, that statement makes two assumptions:

  • Developers cost $150/hour, which is only true in select locations and for select people — the cited source of that value says that is an estimate for “a professional senior software developer in the United States”

  • That the cost of AI compute will remain steady, increasing roughly in line with the increase in the cost of software developers

The economics may not work out so well if either of those assumptions are unfounded. The first one certainly is, as many software developers over much of the world cost a lot less than $150/hour. And my bet is that the second assumption is also flawed, and that the cost of AI computer will climb drastically in the next few years.

“If Something Cannot Go On Forever, It Will Stop”

Uber, and to some extent Lyft, built their businesses up by spending investor cash on subsidizing rides:

Uber passengers were paying only 41% of the actual cost of their trips; Uber was using these massive subsidies to undercut the fares and provide more capacity than the competitors who had to cover 100% of their costs out of passenger fares.

(from “Can Uber Ever Deliver? Part One – Understanding Uber’s Bleak Operating Economics”)

While extremely aggressive, this is a well-known play in the VC-backed startup playbook. The subsidies help in (at least) two ways:

  1. They get your customer base “hooked” on using your product or service, by making it so cheap that they do not think twice about using it

  2. They help build a moat, by preventing competition from entering the market (unless they too use the same subsidy approach), until such time as you are so large that competition is much less of a risk

There are signs that major AI vendors are doing the same thing, and frankly it would be surprising to me if they were not doing that. Ed Zitron wrote:

Based on an analysis of many users’ actual token burn on Claude Code, I believe Anthropic is burning anywhere from $3 to $20 to make $1, and that the product that users are using (and the media is raving about) is not one that Anthropic can actually support long-term.

Partly, that is based on the Anthropic financial reports. Partly, that is based on a crowdsourced look at how many tokens you get to use with one of the Claude monthly subscriptions, such as Claude Max. Effectively, you get a “bulk rate” discount with those subscriptions, so Anthropic gets less per-token revenue from subscription usage than they do from full-price API tokens.

If that analysis is correct, then the “ten dollars an hour of compute” really needs to be more like $30-200/hour, just for Anthropic to break even. It might have to go higher if Anthropic wishes to turn a profit.

(Not So) Tiny Bubbles

That, of course, assumes that Anthropic survives long enough to raise the prices.

Lots has been written about the prospect that the US stock market is in an “AI bubble”. Much of the recent run-up of the market has been tied to the “Magnificent Seven” firms: Alphabet, Amazon, Apple, Meta, Microsoft, NVIDIA and Tesla. And a lot of that is on the back of a financial ouroboros with AI Company A investing in AI Company B, which turns around and agrees to buy a bunch of AI Company A’s stuff.

Whether due to AI-related issues (e.g., insufficient demand for all the data centers being built) or other impacts (e.g., war), there is a distinct chance that the bubble pops. If we wind up with a 2008-style financial crisis, what happens to OpenAI, Anthropic, and other similarly-placed firms?

It is certainly possible that they could survive, especially if they jack up their revenue by raising prices a lot. It is also possible that they will wind up being acquired by firms that already have hosting prowess (e.g., Alphabet, Amazon, Meta, Microsoft), with a side-effect of reducing competition in the generative AI market. And it is not out of the question that some AI model creators will simply crash and burn… which also reduces competition, by eliminating competitors the hard way.

Oligopolies Gonna Oligopple

(note: “oligopple” is not a real word, though it should be)

When there are few competitors in a market, the resulting oligopoly often results in higher prices. To an extent, that is the point of trying to establish an oligopoly in the first place.

It’s not like there are a lot of hosted frontier model providers. Right now, it feels like a race for market share and to build the moat to preclude other competitors from entering the market. But, eventually, the oligopoly will start raising rates, just because they can. If competition shrinks due to the AI bubble popping, the smaller oligopoly may get to the point of raising rates faster.

A lot of what Cory Doctorow’s “enshittification” stems from is oligopoly: too few competitors in the market and few reasonable substitutes for what they offer. The resulting market power lets those few competitors do all sorts of things that are bad for their customers, like jacking up rates, because those customers have nowhere else to turn.

So, what happens if that Claude Max subscription climbs to $300/month? What if it climbs to $2,000/month? What if the cost of additional tokens rises commensurately? What if the other surviving oligopoly members raise their prices along the same lines? And what if it is no longer Claude Max but Microsoft Copilot Max Powered By The AI Formerly Known As Claude, due to a shakeout as part of an AI bubble pop?

(yeah, that name is long, but branding is hard)

Even at today’s prices, the economics of using frontier models for code generation only make sense when software developers are expensive. In a lot of the world, that is not the case today. With a serious bump in the price of AI compute, the economics will narrow the use cases even further.

What I’m Doing

I have serious ethical issues with hosted frontier models, so while I have a Claude Pro subscription (presently $17/month), my attention is more on local models. Qwen 3.5 has some promise, and it runs comfortably on a 64GB Mac. It is not nearly as capable as, say, Claude Opus 4.6, but some of that can be addressed by advance planning. I am experimenting with OpenCode commands to provide better prompts for Qwen 3.5, for things that I want done routinely. If I run into OpenCode limitations, I can use Koog and set up my own lightweight bespoke coding agent.

I am not trying to have something like Qwen 3.5 completely replace Claude Opus 4.6. I am trying to minimize my use of Claude, though, so I want to find ways that local models can do some of the routine (“grunt”) work. I will reserve Claude for those handful of places where it might be faster than me. As a result, my techniques will handle a massive spike in AI compute cost — I would drop Claude and rely on Natural Intelligence™ (🧠) for its role, while still getting benefit from the local model ecosystem.

Mar 06, 2026


Random Musings on the Android 17 Beta 2

Less than two weeks after the release of Android 17 Beta 1 (and its associated random musings), Beta 2 dropped. And since the “Platform Stability milestone” is slated for March, we could get that in just a few days.

😑

What You Should Test Very Soon

While the whole “bubbles” thing seems cute, and while Google thinks that just supporting multi-window is sufficient… I recommend testing it.

If your app might need to talk to devices on the local network, I also recommend examining ACCESS_LOCAL_NETWORK closely. Google’s documentation on this is very muddled:

What Seems Nice

The ACTION_PICK_CONTACTS API, for getting user-specified field-level access to contact data, seems promising.

The ACTION_OPEN_EYE_DROPPER API, for getting a specific on-screen color from the user, is interesting.

What Seems Cute But Largely Pointless

There is a new “handoff” API, centered around setHandoffEnabled() on Activity, that enables “handing off” running apps between devices, such as a phone and a tablet. My guess is that the percentage of Android app users owning 2+ devices is very low and will not be increasing much.

What Might Be Bubblicious

A task can now have a TaskLocation, “that consists of the host display identifier and rectangular bounds in the pixel-based coordinate system relative to host display”.

What Is Going Away

There had been a setContentCaptureEnabled() function on ContentCaptureManager to opt out of content capture. That is now deprecated – use FLAG_SECURE.

The Bluetooth SCO support in AudioManager is largely deprecated, as they are routing you to newer “communication device” APIs.

isCredential() and setIsCredential() on View are deprecated, as “the purpose and usage expectations of this property were never clearly defined”. Frankly, we can say that about a lot of the Android SDK.

What Else Seems Interesting

There is a new nativeService attribute, presumably going on the <service> manifest element. This will bypass the Android Runtime for the process hosting the service, and instead loads a native library of yours. For isolated services that eschew the Android SDK, this avoids the overhead of the Android Runtime.

There are 7 new permissions, though most are role-specific.

There is a new Notification.Metric class and related classes like Notification.Metric.FixedFloat, but it is unclear what they are for.

DocumentsProvider now offers an API for trash.

A network security policy can now request domain encryption modes.

Feb 27, 2026


Older Posts