Why ACARSd happened.
A faithful English reconstruction of the German text that was published on the original acarsd.org. The language has been modernized lightly; the events, sequence and humor are retained.
An email that was never meant for me
In mid-December 2002, an email arrived that was not intended for me at all. It came from Gábor K. in Budapest and contained an ANAD monthly report about aircraft movements over Hungary. I immediately asked how one could obtain such information.
The answer was simple: “You need Windows, an airband scanner, a long cable, and AirNav or WACARS.”
Windows? That was the problem. I had six computers running permanently at home — all of them Linux systems.
I ordered a Uniden Bearcat 120 from the United States. Three months later a Bearcat 80 arrived instead, without airband reception. After losing money on that adventure, I bought a 120XLT from Germany and started looking for an ACARS decoder for Linux.
There wasn’t one.
Learning the signal the hard way
KRACARS under DOS became my reference. WACARS decoded only a handful of contacts in several hours on my setup; AirNav performed better, but both required Windows. Friends suggested FFTW. My reaction in the original story was blunt: “Great. I’m not a mathematician.”
I recorded a real ACARS transmission as a WAV file, modified it repeatedly and played it to the Windows machine to see whether KRACARS could still decode it. I knew roughly where the data started and ended. I printed nearly a thousand pages of numbers, looking for a pattern in the samples.
After three days without sleep I was ready to give up. According to my recollection, my then-wife was already threatening divorce. At some point on the third day I woke up with the pattern of the keyboard pressed into my face — I had simply fallen asleep while programming.
Then, almost by accident, the scanner was connected to the Linux machine while ACARSd was running. A message appeared from HA-LOC, at that time a new Malév Boeing 737 on its delivery flight. Nothing had been hard-coded. The decoder had just received its first real aircraft message.
“Thanks, Malév.”
The day ACARS suddenly went silent
ACARS traffic in the local setup was received on 131.750 MHz, and once the decoder worked reliably, antenna performance became just as important as software. A radio-amateur friend from a nearby village — a man with an enormous antenna installation of his own — helped KjM obtain a roughly 4.9-metre antenna. It was mounted on the roof and transformed the receiving range. In favourable directions ACARS transmissions could be heard far toward the Adriatic and almost as far as Salzburg. Toward Romania the improvement was much smaller: the neighbouring house was roughly three metres higher and blocked that part of the radio horizon.
One day, while KjM was working at the computer with the ACARS messages scrolling beside him as usual, the stream simply stopped. Ten minutes passed. Then fifteen. No aircraft. The first suspect was naturally the server. It was running.
Next came the receiver. KjM climbed beneath the roof using the special ladder, disconnected the audio lead from the Bearcat scanner and listened. The familiar ACARS transmissions were there. So the radio path appeared to be alive. Back at the computer he rebooted the PC. Still nothing. Zero messages.
There was no more time to investigate because he had to leave for tennis. Only after returning home did the actual fault become obvious — and it had nothing to do with Linux, the decoder, the sound card or the Bearcat.
The neighbour had received a new alarm system that day. The installation company had apparently decided that KjM's large roof antenna was in their way. They had removed the roughly five-metre ACARS antenna and disposed of it, then installed their own small white alarm-system antenna, about half a metre long, in its place — effectively on KjM's roof.
The resulting telephone call to the neighbour was not particularly calm. Apart from the antenna itself, the installation used a carefully selected, cut-to-length cable with gold-plated connectors. The following day the installers returned, rather less confidently, with apologies and the removed antenna. But another problem remained: after what they had done, the original cable could no longer be connected because it was too short.
The company produced an ordinary replacement cable costing roughly 7,000 HUF for eight metres. KjM rejected it before it was installed and insisted that the system be restored with an equivalent to the cable that had been there before. That cable cost approximately 35,000 HUF for eight metres. After considerably more discussion, the proper replacement finally arrived.
The large antenna returned to the roof, the installation was restored — and the familiar stream of ACARS transmissions returned to the screen.
Sometimes debugging a reception problem requires checking the server. Sometimes it requires checking whether somebody has removed your antenna.
The network was part of the plan before the decoder worked
Asked what I was trying to achieve, my answer was already clear: I wanted to write a Linux ACARS decoder that would show pictures of contacted aircraft, act as a server for other users and maintain a database that could be searched.
While the decoder was being stabilized, I wrote the first client in Tcl/Tk. The first downloadable version therefore already reflected a larger idea than local decoding.
“KjM — still too weak”
The operator of planepictures.net tested ACARSd and compared it directly with ANAD using the same audio feed. His verdict arrived by email: “KjM — still too weak.”
Officially, comparing a one-month hobby project with software backed by a company and years of development was unfair. Unofficially, it bothered me.
I built him a special version that saved audio whenever ANAD decoded a transmission that ACARSd missed. Those real-world failures became test material. Improved versions went back and forth until another email arrived:
“KjM, you made it. ANAD 137 — ACARSd 169 in one hour.”
YES.
By then four freely available ACARSd servers were already online, and my own server typically had around three remote clients connected.
CRC, uplinks and better data
A user in Norway explained that ACARS was not just downlinks: uplinks and squitter traffic also had to be handled. Soon afterwards he pointed out that both ANAD and ACARSd could occasionally decode nonsense. The obvious cure was checksum verification.
Information about the checksum was hard to find. RadioRaft, a DOS program, could validate ACARS frames. I contacted its author and had the necessary information within an hour. CRC checking became part of ACARSd.
Windows — against my better judgement
The second release attracted much more attention. A recurring request was: “Great program, unfortunately not for Windows.”
My original story answers simply: “I didn’t want to!”
But Cygwin offered a route. The C source compiled with surprisingly few complaints; only sound input had to be adapted to the Windows API. The resulting executable went to planepictures.net, where the reply came back that it decoded just as well as the Linux build — but that ncurses was unacceptable and Windows needed windows.
Tcl/Tk solved that problem while keeping a shared GUI approach between Linux and Windows. Up to version 1.20 the Windows build used Cygwin; later versions moved to MinGW.
Two scanners from one stereo sound card
Another user asked whether ACARSd could read two sound channels. Stereo samples arrive interleaved as left, right, left, right. So one decoder pass could take every second sample starting at offset zero, and another could start at offset one.
The feature became TWO IN ONE: two scanners through one stereo sound card.
When somebody with three scanners asked whether he had to start ACARSd twice, the next step was obvious: support more sound cards. ACARSd grew to three sound cards and six scanners on a Pentium 133, and later releases supported up to four sound cards and eight receivers.
What this story tells us today
The important part is not that every design decision was elegant by modern standards. It is that the system evolved directly against real signals and real users. Local decoding, remote clients, server discovery, databases, web access and multi-receiver operation grew together.
The Internet-sharing model that later became familiar through large ADS-B networks was already present here in an ACARS world: geographically distributed receivers turning radio traffic into data that could be watched from somewhere else.
Next: how the decoder actually worked →
Why ACARSd stopped
ACARSd did not end because ACARS itself simply disappeared. The turning point came in 2010, when a UK aviation company commissioned a new browser application. The recovered source identifies that customer and platform unmistakably as FlightGlobal: the project was called ATLAS.
According to KjM's recollection in 2026, the commercial agreement contained a painful restriction: if the collaboration was not renewed, development of ACARSd and related projects had to stop. ACARSd had always been a personal, non-commercial hobby project — one that cost money rather than earned it — so the contractual consequence was particularly bitter.
The frustration was immediate. The old Pentium 133 that had served the project through its formative years was destroyed. Development stopped, but the remaining acarsd.org servers continued to run for years afterward.
When the EU General Data Protection Regulation (GDPR) became applicable in 2018, the remaining public infrastructure was finally shut down. What survived were source trees, CVS repositories, website archives, documentation — and the ideas now preserved by this museum.
Source note: FlightGlobal as the ATLAS customer is directly visible in the recovered 2010–2011 source tree through URLs, branding assets and deployment paths. The contract terms, destruction of the P133 and the final GDPR-era shutdown are personal recollections recorded by KjM in 2026.
ATLAS: the next chapter
ATLAS deserves its own exhibit. Its recovered CVS tree shows a Google Maps application for community SBS stations, with aircraft trails, airports, sender stations, filters, day/night effects, position lights and — unusually early — aircraft silhouettes selected by type and colourised by airline.