Source archaeology • by the numbers

How big did ACARSd become?

What began as a sound-card decoder grew into a family of daemons, clients, libraries, databases, web services and later ADS-B/Mode-S tools. The surviving source trees finally let us put some numbers on that growth.

47,976 physical lines of C in the surviving ACARSd 1.51 daemon build
80 C implementation files linked into that build
23,593 source lines in ACARSdClient: Tcl/Tk GUI plus native C support
125,307 lines across the recovered project snapshots listed below
🤓 Nerd fact

What if you printed ACARSd?

The 80 C source files linked into the surviving ACARSd 1.51 daemon contain 1,233,701 characters in total — including comments, whitespace and source formatting.

Assuming roughly 3,000 characters on a normally filled A4 page, the daemon source alone would occupy about 411 A4 pages. Printed single-sided on ordinary 80 g/m² office paper, that would be a stack roughly 4.1 cm high.

And that is only the ACARSd daemon — not ACARSdClient, the libraries, feeders, HomeRadar or ATLAS.

ACARSd 1.51 on paper
411

A4 pages

≈ 1.23 million source characters
≈ 4.1 cm of paper

The software family

Source code, counted from the surviving archives.

The figures are physical source lines, including comments and blank lines. For ACARSd, ACARSdClient, libacarsd and libhomeradar the surviving build definitions were used where possible. For CVS/RCS projects, the recovered HEAD revision was counted. Bundled third-party code such as SQLite and external ActionScript libraries is excluded.

ProjectLanguageFilesLinesBasis
ACARSd 1.51 daemonC8047,976Surviving Linux build target
ACARSdClientTcl/Tk3013,417GUI/application scripts
ACARSdClient supportC2610,176Native support code used by the client
libacarsdC42,495Core Linux library build target
libhomeradarC3612,499Surviving library build target
libacarsd2C229,800Recovered CVS HEAD sources
winsend2C / Win323411,917Native MinGW32-era GUI; bundled SQLite excluded
mACARSC164,264Recovered CVS HEAD sources
FlightShare2C / Win32174,739Native MinGW32-era GUI; recovered CVS HEAD
ATLASActionScript / MXML218,024Project classes + main MXML; third-party libraries excluded
Important: the grand total is a measure of the recovered project snapshots, not a claim of 125,307 unique lines personally written by one person. Utility modules were reused between projects, and the archives contain shared code. The individual project figures are the meaningful numbers.
ACARSDCLIENT

30 Tcl/Tk files

13,417 lines of Tcl/Tk drove the GUI — maps, server lists, statistics, sockets, uploads and even the hidden BreakOut, Memory and MovePuzzle games.

NATIVE SUPPORT

26 C files

10,176 lines of C supported image handling, compression, maps, statistics, networking helpers and other native functions behind the Tcl/Tk client.

ATLAS

21 project source files

8,024 lines of recovered ActionScript/MXML cover the ATLAS application itself, excluding the large third-party libraries bundled in the CVS tree.

The recovered database • verified 30 August 2026

114,328,158 message rows — and still growing.

After the binary rescue and the final WORLD ACARS Report import, a direct count of the reconstructed MariaDB database returned 114,328,158 message rows. The local 2026 feeder is active again, so this number is a documented recovery snapshot rather than a permanent ceiling.

114,328,158

messages in the reconstructed database

Verified with a direct full-table count on 30 August 2026 after the historical imports had completed.

RECOVERY SNAPSHOT • LIVE FEED CONTINUES
01 JAN 2006

reliable preserved archive start

The earliest continuous historical material begins with ACARS_Report_20060101.txt. Earlier isolated timestamps were traced to corrupted 2017-era client records rather than genuine 2002/2005 traffic.

PROVENANCE CHECKED AGAINST UPLOAD METADATA
6,881,498

message rows dated 2006

The first full archive year already contains almost 6.9 million searchable records across the reconstructed sources.

INDEXED RANGE COUNT
45

known pre-2006 timestamp artefacts

Forty Qingdao records appear as 31 December 2002 and five US records as 30 May 2005. All came from ACARSd 1.65 uploads received in 2017 and are retained as historical data-quality evidence.

PRESERVED, NOT TREATED AS ARCHIVE START
WORLD ACARS Report import • completed

Two thousand reports became searchable data again.

The final importer pass classified all 4,072 surviving files, preserved report-source provenance and skipped material already present. Counts below describe the completed import run, not an estimate.

2,096

valid WAR files

Structurally recognised WORLD ACARS Reports among 4,072 surviving files; 1,976 files were invalid or non-WAR material.

FINAL CLASSIFICATION
41,539,218

WAR records parsed

Records successfully parsed from the valid historical reports across the complete import run.

4,777 MALFORMED LINES RETAINED IN COUNTS
7,919,325

new message rows imported

Rows added after idempotent duplicate handling; 1,663 report files were already imported and therefore skipped on the final pass.

IDEMPOTENT IMPORT
41,097,891

records linked to WAR provenance

The source-preservation layer links historical records to 4,429 unique WORLD-report source keys.

WAR SOURCE LEDGER
Importer diagnostics: 2,088 reports had a header count that did not exactly match the parsed body, and 4,777 individual report lines were malformed. Those discrepancies are preserved as provenance rather than silently rewritten.
The data side

Then the messages started to pile up.

The code was only half of the story. Every connected receiver could contribute contacts, and the searchable database grew until ordinary queries became an engineering problem of their own.

18M+

flight movements

Remembered in the searchable database by 2008. Contemporary libhomeradar notes from the period document query timeouts, server load and the introduction of faster indexes.

Author recollection + surviving project notes
35,499

entries in one World ACARS report

The largest surviving report supplied for the museum is from 18 June 2008.

Surviving World ACARS report
16,081

entries in an early worldwide report

The surviving report for 2 January 2006 already shows more than sixteen thousand worldwide contacts for a single day.

Surviving World ACARS report
17,996

entries in a late worldwide report

A large surviving 2014 report shows the network still collecting almost eighteen thousand entries in a day.

Surviving World ACARS report
DATABASE

1 master + 3 mirrors

The database infrastructure eventually ran as a master with three synchronised mirrors — a long way from the small database that accompanied the first decoder.

RADIO INPUT

Up to 8 scanners

Later ACARSd releases could use four sound cards and eight airband scanners. The multi-card support grew out of real contributor setups, including the famously private station in Oberursel near Frankfurt with three scanners.

NETWORK

TCP 2202

The characteristic ACARSd service port became recognisable enough to receive its own Nmap service detection and, later, a dedicated acarsd-info.nse script.

Perspective

It stopped being “a decoder” rather quickly.

ACARSd 1.51 alone is nearly forty-eight thousand physical lines of C. Around it sat a 23,000-line client, reusable decoder libraries, HomeRadar, Windows feeders and finally ATLAS. The database reached tens of millions of movements while daily worldwide reports could contain tens of thousands of contacts.

None of these figures prove software quality. They do show the scale that a hobby experiment reached.

Recovered snapshots
9

major projects / components

ACARSd, ACARSdClient, libacarsd, libhomeradar, libacarsd2, winsend2, mACARS, FlightShare2 and ATLAS are represented in this count.

The 2026 binary recovery

The final decoder run covered 179 rescue blocks, from acars-0000 through acars-0178. These are recovered client uploads, not the old WORLD report files and not a reconstruction of the original production database.

1,729,775

Binary uploads recovered

Original server-side upload files rescued from the failing ext3 host.

RAW COLLECTION FILES
1,723,977

Successfully decoded

Only 5,798 files failed structural decoding.

99.6648% SUCCESS
72,788,180

ACARS records

Individual reconstructed records contained in the successful uploads.

42.22 RECORDS / UPLOAD AVG.
83.04%

Format 1.66

1,431,560 recovered uploads

16.96%

Format 1.65

292,417 recovered uploads

01 • RESCUERead damaged directory entries in blocks without modifying the original server.
02 • DECODEParse the collection header and each preserved acarsdata record.
03 • VERIFYStore per-block summaries and retain decode errors rather than silently dropping them.
04 • REINDEXLoad all 72,788,180 records into MariaDB and rebuild the historical search indexes.
Database reconstruction completed: all 179 recovered binary blocks produced 1,723,977 uploads and 72,788,180 recovered ACARS records. 42,509,887 messages have a corresponding preserved message_content row. The later WORLD-report import added its non-duplicate historical material and source provenance. A final direct count on 30 August 2026 returned 114,328,158 rows in messages. Secondary indexes for registration/time, flight/time, time and ICAO24/time are rebuilt and active.

Important: extreme timestamps are not automatically treated as the historical start or end of the archive. Client clocks and upload context are checked separately. A 26 August 2026 upload has, however, been independently validated against its original TAR mtime and Apache POST log.