AX.25 on Linux
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. The kernel provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.
What is changing
- Upcoming mainline kernel releases will no longer include the traditional AX.25 stack
- Existing documentation related to these protocols will no longer apply to systems running newer kernels
- Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels
- The out-of-tree repository
linux-netdev/mod-orphanwill host the removed code for those who want to inspect it or maintain it separately
Who is likely to be affected
Probably affected
- Operators running older Linux packet-radio setups that depend on kernel AX.25 interfaces
- Users of older applications that assume AX.25 support is available through the Linux kernel network stack
- Maintainers of software that has never needed to implement its own AX.25 handling because Linux already provided it
Probably less affected
- Operators already using user-space TNCs or modem software like Dire Wolf
- Applications for things like APRS that already handle AX.25 internally and do not depend on Linux kernel interfaces
- People experimenting with newer software that does not depend on the old kernel path
Not the end of AX.25
AX.25 still remains useful and is in use. The change is that Linux will no longer provide a built-in kernel implementation of it. Instead, applications that need AX.25 will need to implement it in user space or rely on external software that does.
The difference between in-kernel and user-space implementations is that in-kernel code, working like a device driver, can present AX.25 interfaces as native network interfaces. Applications can then use familiar socket APIs to build networking functionality without having to worry about the details of AX.25 (in theory).
User-space implementations, on the other hand, sit between a radio and an application without needing to be part of the kernel. On the radio side, they may work with audio devices or external TNCs over serial ports. On the application side, they present a data stream or API that the application can use. Instead of talking to what looks like a network device, an application talks to another application that knows how to handle AX.25. This means applications need to be able to talk to such user-space tools. Many applications already do, through KISS, AGWPE, TCP/IP, or other interfaces.
Today, a lot of practical packet-radio software already uses or is compatible with user-space implementations.
Taken together, this means that removing AX.25 from the kernel is significant mainly for people preserving older working systems and people still using software built around the legacy kernel interfaces. For new deployments, and for many existing ones, it is more practical to build on user-space tools.
If you are just getting started
If you are new to packet radio on Linux, user-space tools are the way forward. You may already be using them in the form of APRS clients or software TNCs.
You face the challenge that much of the documentation currently available still refers to the old kernel-based model. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today.
Next-step paths
There are a few general ways to handle the transition away from kernel AX.25 support. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing to change.
“Freeze”
Keep an older kernel in service.
Use this when:
- the station is working now
- the software depends on kernel AX.25 interfaces
- you need continuity more than modernization this week
This is often the least disruptive short-term option, but it carries security debt. Older kernels do not receive fixes for newly discovered vulnerabilities forever, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth limiting the system’s role, network exposure, and upgrade churn.
Reconfigure
Keep the same application, but change how it reaches the radio side.
Typical examples:
- switch from a kernel AX.25 port to KISS
- switch from a kernel AX.25 port to AGWPE
- attach the application to a software TNC instead of a kernel network interface
This is often the best path when the application itself is still useful, but its old default Linux integration is not.
Bridge
Insert a user-space modem or TNC layer in front of the application.
Typical examples:
- Dire Wolf presenting KISS over TCP or serial
- Dire Wolf presenting AGWPE over TCP
- another software TNC or packet engine exposing a stable host-side protocol
This path is especially useful when the application can already speak KISS or AGWPE but was previously wired into a kernel-based setup.
Replace
Move to different software that already lives comfortably in the user-space model.
This is often the cleanest long-term answer for:
- new deployments
- APRS-focused stations
- stations whose existing software is effectively unmaintained
Revive
Carry the out-of-tree kernel code, help maintain it, or port missing behavior into a new user-space implementation.
This path makes sense mainly if:
- you have a real use case that still requires the old kernel semantics
- you are willing to do development and maintenance work
- you are trying to preserve something beyond one private station
Compatibility snapshot
The table below is not exhaustive, but it covers many of the tools readers are most likely to encounter when working with AX.25 or adjacent Linux packet-radio workflows.
These are not endorsements. The “Common migration target” column is meant as a practical example of what kind of thing a reader might try next, not as a universal recommendation.
| Software | Current interface | Works in the new world? | Next step to consider | Common migration target |
|---|---|---|---|---|
| Dire Wolf | User-space AX.25; KISS over TCP/serial; AGWPE over TCP | Yes | Bridge or Replace | Dire Wolf as the anchor itself, or paired with Pat / Xastir / aprx |
| Pat | AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP | Yes | Reconfigure or Bridge | Dire Wolf over AGWPE/TCP |
| LinBPQ / BPQ32 | Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces | Yes | Reconfigure or Replace | LinBPQ itself, or Dire Wolf feeding LinBPQ via KISS |
| Xastir | Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports | Depends | Reconfigure | Dire Wolf or another KISS/AGWPE-capable software TNC |
| aprx | Serial KISS or kernel AX.25 interface | Depends | Reconfigure | Dire Wolf or a hardware KISS TNC |
| YAAC | User-space APRS client using external TNCs / serial interfaces | Yes | Reconfigure | Existing external TNC, or Dire Wolf acting as one |
| SoundModem | User-space modem/TNC; can expose KISS and other interfaces | Yes | Bridge or Replace | Dire Wolf or SoundModem itself, depending on platform and feature needs |
| QtSoundModem | User-space modem/TNC; KISS and AGWPE-style host-side interfaces | Yes | Bridge or Replace | QtSoundModem or Dire Wolf as the software-TNC layer |
| KISS-oriented legacy applications generally | Usually external TNC, pseudo-tty KISS, or TCP KISS | Depends | Reconfigure or Replace | Dire Wolf, QtSoundModem, or a hardware KISS TNC |
| JNOS 2 | Own networking environment; typically external TNC / KISS oriented rather than Linux kernel AX.25 sockets | Yes | Reconfigure or Replace | JNOS itself with a KISS-capable modem/TNC |
| aprsdigi | APRS digipeater software; commonly used with KISS TNCs | Yes | Reconfigure | Dire Wolf or a hardware KISS TNC |
| ax25-tools | Tools for configuring Linux AX.25 / NET/ROM / ROSE ports | No | Freeze or Revive | None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment |
| ax25-apps | User applications for AX.25 / NET/ROM / ROSE over the Linux stack | Mostly no | Freeze or Revive | Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool |
| ax25d | AX.25 connection dispatcher / daemon built around the Linux AX.25 stack | No | Freeze or Revive | Usually not a direct one-for-one migration; often LinBPQ, JNOS, or an application-specific redesign |
| net2kiss | Converts a kernel AX.25 network interface into a pseudo-tty KISS stream | No | Revive | Replace the whole pattern with a native user-space KISS or AGWPE source |
Some notes about reading the table:
- Yes means the software already has a credible path that does not require the removed in-tree kernel stack.
- Depends means the software can still work, but only through a non-kernel interface or a different configuration mode.
- Mostly no means the software category is tightly coupled enough to the old Linux stack that it is not a good default choice on new upstream kernels without extra work.
Existing user-space projects worth studying first
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:
- modem/TNC functions
- AX.25 framing
- KISS or AGWPE host-side interfaces
- APRS, BBS, node, or messaging application layers
- integration with modern Linux networking through user-space boundaries
| Project | Project page / repo | What it already covers | Why it is worth inspecting |
|---|---|---|---|
| Dire Wolf | GitHub | Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE | One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of |
| Pat | GitHub | Messaging client with AX.25 support and AGWPE integration | Useful when the real goal is messaging workflow rather than rebuilding low-level plumbing |
| LinBPQ / BPQ32 | project page | Node, BBS, switch, packet stack, multiple radio/network interfaces | Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case |
| Xastir SoundModem | GitHub | User-space modem/TNC functions for packet-radio host applications | Worth studying as an existing open-source modem implementation rather than inventing one from scratch |
| QtSoundModem | project page | User-space modem/TNC with KISS and AGWPE-style interfaces | Another active example of the “software TNC in user space” approach |
| aprx | project page | APRS iGate and digipeater software | Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking |
| YAAC | project page | APRS client and related tooling | Useful as an example of an application-layer approach that does not depend on the Linux AX.25 kernel stack |
| JNOS 2 | project page | Packet-radio networking environment and applications | Worth inspecting for people whose real interest is preserving classic packet workflows rather than Linux kernel semantics |
If you already have an older setup
If you built something years ago and it still works, do not panic. The right next step depends on what kind of old setup you actually have.
Case 1: It works, and you do not need a new kernel right now
The least disruptive option may be to leave it alone for the moment:
- staying on a currently working kernel for that system
- treating the system as a stable appliance rather than a frequently upgraded workstation
- documenting what you have before changing anything
Before you touch the system, write down:
- which kernel version it depends on
- which applications depend on kernel AX.25
- how the radio or TNC is connected
- whether the system is doing connected-mode AX.25, IP over AX.25, APRS, forwarding, or something else
That inventory makes every later decision easier.
Case 2: You need to keep old software working
If you depend on software that expects the old kernel interfaces, you may need an interim compatibility strategy rather than an immediate redesign.
Potential short- to medium-term options include:
- staying on an older kernel for that machine
- evaluating the out-of-tree kernel code now hosted in the
linux-netdev/mod-orphanrepository - isolating the legacy workflow in a dedicated machine or virtual machine rather than tying it to your general-purpose Linux environment
This is not elegant, but it may be the most practical option if a working station depends on legacy interfaces and there is no ready user-space replacement for your exact use case.
If you choose this route, treat it as a containment strategy rather than a permanent default. A deliberately isolated older kernel can buy time, but it also accumulates security debt as new vulnerabilities are found and fixed only in newer supported lines.
Case 3: You are willing to modernize
If you are already making changes, it may be better to migrate toward a user-space model than to rebuild the same dependency on a shrinking kernel path.
That usually means asking:
- Do I actually need Linux to implement AX.25 in the kernel?
- Can my application talk to a user-space TNC or modem over KISS or AGWPE instead?
- Am I really using AX.25 networking, or just one narrow application that happens to sit on top of it?
In many cases, the cleanest long-term answer is to preserve the radio-side protocol in user space while simplifying everything around it.
Architectural direction
For many people, the most practical direction is now a user-space one: software TNCs, external host-side interfaces such as KISS or AGWPE, and applications that do not assume Linux kernel AX.25 sockets are always present.
That does not solve every legacy use case automatically. But it does reduce dependence on upstream kernel decisions and makes it easier to compose working systems from smaller pieces.
IP over AX.25
If your goal is specifically IP over AX.25, the choices become narrower.
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:
- AX.25 framing and control in user space
- integration to IP through TUN/TAP or similar interfaces
- narrower, more maintainable components rather than a large in-kernel subsystem
If you are stuck with old software
Some people will be in the awkward middle: the software still matters, it expects the kernel interfaces, and there is no obvious one-command migration.
If that is you, the best immediate response is usually not “rewrite everything,” but:
- identify the exact interface your application expects
- determine whether that interface is kernel AX.25 specifically, or simply KISS / AGWPE / serial control
- check whether a user-space adapter, software TNC, or out-of-tree module can preserve the workflow
- decide whether the system should be frozen, migrated, or rebuilt
For some stations, a preserved older Linux environment may be the right answer for a while. For others, the better answer will be to retire the old application and move to a user-space stack.
If you want to help advance AX.25 on Linux
If this change motivates you to improve the state of AX.25 rather than simply work around it, there are several useful starting points.
1. Clarify the real use cases
The first question is not “How do we save everything?” but “What do people still need?”
Those may be very different things:
- APRS and monitoring
- connected-mode packet
- mailbox / BBS workflows
- IP over AX.25
- compatibility with specific TNCs or handheld radios
- Linux support for existing packet-radio applications
Without that clarity, it is easy to spend effort rebuilding interfaces nobody still uses while missing the ones that still matter.
2. Prefer small boundaries
If you want to revive or modernize AX.25 support, it is worth favoring:
- small, testable user-space components
- clean interfaces between radio handling and host networking
- compatibility layers only where they are actually needed
3. Preserve working knowledge before it disappears
A lot of Linux AX.25 knowledge lives in:
- old HOWTOs
- mailing-list posts
- working systems on shelves
- people’s heads
Now is a good time to capture:
- what still works
- what specific applications still matter
- which workflows require kernel compatibility
- which ones can already move to user space
4. Start from existing active projects
Starting from a maintained or recently active user-space project is likely to be more productive than starting from nostalgia alone.
That may mean extending an existing implementation, building missing protocol pieces, or writing compatibility shims where they create the most leverage.
Suggested attitude
This topic attracts strong opinions:
- nostalgia for the old Linux support
- frustration from people whose working systems are affected
- arguments about whether kernel support was ever the right design
- arguments that packet radio is too niche to matter
Those reactions are understandable, but they do not help much by themselves.
The more useful questions are:
- What still needs to work?
- What can move to user space today?
- What legacy interfaces are still worth preserving?
- What should be documented now so the next person does not have to rediscover everything from scratch?
External resources
- Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem
- Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream
- LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort
- Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25
- linux-netdev/mod-orphan, the out-of-tree repository where the removed code is being staged
- Dire Wolf, a widely used user-space software TNC for AX.25 packet radio
- Pat, a current Winlink client with AX.25 support and AGWPE support
- BPQ32 / LinBPQ documentation
- aprx, APRS iGate and digipeater software for POSIX systems
- YAAC, Yet Another APRS Client
- Jeff Tranter’s Linux AX.25 HOWTO, useful mainly as historical background now