WORKBENCH · THE HOUSE
JINI · 1999 → 2026

In 1998 I had the Jini spec. It took me twenty-seven years to build the house.

Sun promised devices that would find each other on a network and describe themselves, with nobody configuring anything. I had the specification on disk before it shipped. My house now runs 1,702 entities across 134 devices — so I can finally check the promise against something real. Three of Jini's ideas won completely. Three lost, and the losses are most of what's still wrong with smart homes.

1,702ENTITIES
134DEVICES
44INTEGRATIONS
19ROOMS

Home Assistant 2026.9.1 · 52 manufacturers · measured 12.09.2026

What was in the folder

I went looking through my Drive for a school presentation and found something better. A folder of files that predate almost everything else I own.

jini.glossary.pdf, last modified 17 December 1998. jini-spec.pdf — the Jini Architecture Specification, Revision 1.0 — a month later. Sun had announced Jini in July 1998 and released it on 25 January 1999. I was in high school in Mexico City, and I had the glossary before the technology shipped.

Next to the PDFs, the source tree:

reggie — the lookup service
mahalo — the transaction manager
lease · discovery · lookup · admin · reliableLog

The reason a teenager was reading a distributed-systems spec for fun is on the other page: that same year I was writing an internal messaging tool on raw UDP sockets, and Jini was describing the world I wanted that thing to live in.

A service is an entity that can be used by a person, a program, or another service. The most important concept within the Jini architecture is that of a service.JINI ARCHITECTURE SPECIFICATION · 1999

The six promises, scored

Jini was six ideas in a trench coat. Here is each one against the house, measured rather than remembered.

Jini, 1999My house, 2026Verdict
Discovery
find services by multicast, not by address
Exactly how it works. A multicast query to _matterc._udp is Jini's discovery protocol wearing a different name. The Sonos, the Apple TVs, the Aqara hub — all announce themselves and are found. WON
Join
a service announces its interfaces on arrival
My robot vacuum joined in forty seconds from a QR code and declared its own capabilities — run modes, the six rooms it had mapped. Nobody wrote a driver for it. That is page 13 of the spec. WON
Distributed events
register interest, receive notification
Won so completely nobody names it any more. It's the event bus: state_changed, knx_event, the button on the phone notification that tells the dryer I've emptied it. WON
Lookup by type
ask for a printer, never for an address
I counted the hand-written IP addresses across the hub and the NVR: twelve distinct addresses, twenty occurrences in the camera config alone. This is why re-segmenting my network is a morning of work instead of ten minutes. LOST
Leasing
access expires unless it's renewed
Last week I hand-built a two-hour expiring access window for my installer, out of a boolean and a timer. Jini had this as a system primitive in 1999. Before that, he'd had permanent access for eleven months and used it three times — because nothing expired on its own. LOST
Code mobility
the device ships its own driver
44 integrations the hub has to know about in advance. The printer does not hand my laptop an object that knows how to print. LOST

The bet that actually mattered

The heart of Jini was code mobility. A service wouldn't just say I am a printer — it would hand you a Java object that knew how to talk to that specific printer. The client needed no driver, no integration, no vendor SDK. It needed an interface and a network.

What we got instead is the opposite: the hub has to know every device in advance. Forty-four integrations, each one a piece of code somebody wrote and somebody has to maintain.

Here's what that costs, concretely. This week my exercise bike stopped reporting. I spent an hour on it before doing the obvious thing and calling the API directly:

{"status":403,"message":"Access forbidden. Endpoint no longer accepting requests."}

The manufacturer retired the endpoint. No library version fixes that. The integration is now dead code and I removed it. In the world the spec described, that failure mode does not exist — the bike carries its own way of being talked to, and retiring a server on the other side of the internet has nothing to do with it.

Matter is Jini, twenty-five years later, minus the one idea that made Jini interesting.

Discovery over mDNS. Commissioning instead of join. Clusters instead of typed interfaces. Fabrics instead of federation. Multi-admin, so two ecosystems can drive the same device. It is a genuinely good standard and it is recognisably the same design — with the mobile code removed, because shipping executable objects between untrusted devices turned out to be a security problem nobody wanted to own. Exactly one device in my house lives that way today.

What nobody in 1999 saw coming

Jini assumed devices would serve each other on your own network. That the interesting traffic was local.

My vacuum, washer, dryer, air fryer, mower, bed and both cars are locked down locally — zero open ports, nothing listening — and every one of them talks outward, to its manufacturer's cloud. Seven separate vendor clouds to run one house. The cameras and the KNX wiring are the exceptions, and they're the exceptions because they predate the business model.

Local, and proud of it

KNX — 214 group addresses on a wire in the walls, installed before any of this. Ten cameras, recording to a NAS I own. Zigbee. Both answer to nobody.

Cloud, by design

Seven manufacturers. Each one can retire an endpoint, change an auth flow, or go out of business, and a part of my house stops working.

The honest middle

Matter and Thread are local transports — but commissioning, updates and the app still route through a vendor. Local-first is not local-only.

We didn't lose the local network to a technical problem. Jini's model worked. We lost it because the other model was worth more to the people selling the devices — a device that phones home is a device with a subscription, a telemetry stream and a customer relationship. Nothing in the spec could have prevented that, because it was never an engineering question.

So, do I talk to my machines?

Yes. I ask the house questions in plain language and it answers — which is more than the 1999 version of me was dreaming about, and it arrived from a direction nobody in that folder predicted.

But not the way the PDF promised. Not because every machine carries its own manual and introduces itself. Because somebody — very often me, at a terminal, this month — writes the translator for each one by hand, and then maintains it.

Jini was right about the architecture and wrong about the incentives. Twenty-seven years later that is still the whole story.

The companion piece: the other thing in that 1999 folder was an internal comms tool I wrote at 17 — 823 lines of Java, and the first version of a problem I'd spend fourteen years on.

← BACK TO THE WORKBENCH