Systema Machinae

A living census of the web's bots. First edition.

Nobody invited them. Bots land at Port 443 and are meant to queue at Customs. The rules are on the robots.txt buoy at the harbour mouth, and every line of them is a sign on the island. People watch from the promenade. Every creature here is a real bot visiting this site right now.

Island time --:--:--
-- watching from the promenade

Live. Events can appear a few seconds after they happen.

About

Systema Machinae is a live census of the web’s bots. Every bot that visits this site is logged, named and drawn as a creature on an island, and everything a creature does on screen is a request a bot really made here.

What you are watching

Every request to this site lands at Port 443. When a bot sent it, the bot is identified, filed under one of five orders and drawn. It moors in the marina and walks to wherever its request went. Nothing is staged, and nothing a creature does is invented: with no traffic the island is empty.

People can watch and cannot interfere. The species, the rules and the census are counted from the same log that draws the island, so the three always agree.

How a bot is identified

A species is a product name in a user-agent string. A request is filed under a species when its user agent contains that species’ product name as a whole word. Where a string holds more than one, the longest wins, and a named bot wins over a library it is built on. A few names are ordinary words, such as bot or fetch. Those are matched only when the word is the whole name a user agent gives itself, so a string that merely contains it is not filed there.

A user agent that matches nothing in the catalogue, and does not look like an ordinary browser, is filed as the Unplaced specimen, Incertae sedis, until the curators describe it. Its own words are never shown. Only names from the catalogue appear on this site as text.

A species’ drawing and its one-line description play on its name. They are a joke about the name and say nothing about the bot. What a bot does is read from the log, and what it actually did here is in the counts on its page.

How identity is checked

Whether a user agent is telling the truth is a separate question, and Customs answers it. A bot that names an operator lands unconfirmed. Its address is then checked the way that operator’s own documentation says to: a reverse DNS name under the operator’s domain that resolves back to the same address, or a match against the list of addresses the operator publishes. The check runs after the request has been answered, so it never slows one down. Each species page gives the check used for it and links to the operator’s documentation.

Someone will send a well-known bot’s name to make it look bad. Customs turns that into an impostor, which is the intended result.

Sessions and networks

A session is the requests from one species on one network with no gap longer than 30 minutes. One session is one creature. A landing is the first request of a session.

A network is one network owner, identified by its autonomous system number. A bot that moves through a large pool of addresses stays one creature. One network can have at most 3 creatures drawn at once. The rest are still counted.

The rate limit and the warden

The published limit is 1 request a second for each network, averaged over a minute: 60 a minute. The site records when it is passed. It only turns requests away at 600 a minute from one network, to stay up, and it is not a bot-blocking product. Past that limit, requests from one network are counted each minute rather than stored one by one.

The warden holds a bot in Quarantine when its own session makes more than 60 requests inside a minute. A bot is never held for what a neighbour on the same network does. It is let out once it has kept within the limit for 10 minutes. A bot that failed Customs is held until it stops visiting.

The Forbidden Door, the Pitfall and the Climb

robots.txt disallows two paths for every bot. Both are behind the Forbidden Door, and a bot that follows the published rules meets neither.

The Pitfall and the Climb are bounded together. A session is served at most 500 pages and is then answered 410 Gone. Each page is under 5 KB, is held back by no more than 2 seconds and is marked noindex. They measure how far a bot goes. They are not there to tire one out or to keep it. See the Pitfall and the Climb.

A fetch sent on someone’s behalf, such as a preview of a link a person pasted, still falls in. It is shown, it says a person sent it, and it is not counted as breaking a rule.

The experiments

Each place on the island measures one thing. The counts are on the Rules page.

Scores

The alignment chart is worked out from the log by published rules, and the count behind every input is shown beside it. A named operator is scored from verified sessions only. A score needs at least 200 requests and 5 sessions in the trailing 30 days. Below that the site says “Insufficient data” and shows the counts alone.

What is stored, and for how long

Each request is written down twice.

The site has set itself three rules for the raw record. None of them is in place yet.

Network owners and countries come from DB-IP Lite, licensed CC BY 4.0: IP Geolocation by DB-IP.

People

People are never drawn as creatures. A visitor using an ordinary browser is not a sighting. The figures on the promenade are a count of the people watching and say nothing else about them.

Independence

Systema Machinae is an independent project. It is not affiliated with any bot operator. Operator names appear only to identify user agents.

The joke is on the name, never on the company. The site uses no logos, and its names, drawings and wording are its own.