A history of ifconfig, ipconfig and their successors
Forty years of the same job: tell the operating system which address an interface has. The tools changed because the networks did. A timeline, with the reasons behind each turn.
Timeline
| Year | Event |
|---|---|
| 1981 | RFC 791 defines IPv4. Berkeley begins integrating TCP/IP into BSD Unix under a DARPA contract. |
| 1983 | 4.2BSD ships with the first complete TCP/IP stack in a general-purpose OS, and with ifconfig, route, netstat and arp. The ifconfig manual page describes setting an address, netmask and broadcast address and the up/down keywords. The design has barely changed since. |
| 1985–1990 | SunOS, Ultrix, AIX, HP-UX and every other commercial Unix inherit ifconfig from BSD. Each vendor adds its own keywords. |
| 1991 | Linus Torvalds releases the Linux kernel. Networking is absent. |
| 1992–1993 | Ross Biro, then Fred van Kempen, write the first Linux TCP/IP stacks ("NET-1", "NET-2"). Van Kempen's net-tools package provides ifconfig, route, netstat and arp for Linux, modelled on BSD but written from scratch and using ioctl calls into the new kernel. |
| 1994 | Windows NT 3.5 ships Microsoft's new TCP/IP stack with ipconfig, offering /all, /release and /renew. Its output format, with the dotted leaders, is set here. |
| 1995 | Windows 95 includes TCP/IP and the graphical winipcfg for home users; a cut-down command-line ipconfig is also present. Alan Cox rewrites much of Linux networking ("NET-3"); net-tools is maintained by Bernd Eckenfels and Phil Blundell. |
| 1997 | Windows 98 and NT 4 continue with the same tools. Microsoft's DNS resolver has no cache yet. |
| 1998 | Linux 2.2 development. Alexey Kuznetsov designs the new routing subsystem with rtnetlink, a socket-based interface that can express multiple routing tables, policy rules, multiple addresses per interface and traffic control. The old ioctl interface used by ifconfig cannot. |
| 1999 | Kuznetsov publishes iproute2 with the ip and tc commands to drive rtnetlink, and a document ("IP Command Reference") whose terse style is still the model for the manual. Linux 2.2 ships in January. |
| 2000 | Windows 2000 introduces the DNS Client service with a resolver cache, and with it ipconfig /flushdns, /displaydns and /registerdns (needed for Active Directory's dynamic DNS). Mac OS X Public Beta, built on BSD, ships with BSD ifconfig and a separate ipconfig inherited from NeXTSTEP's IPConfiguration agent. |
| 2001 | Windows XP adds /showclassid and /setclassid for DHCP user classes. net-tools 1.60 is released; it will be the last release for ten years. |
| 2004 | NetworkManager is started at Red Hat to make Linux laptops handle Wi-Fi and roaming; it uses netlink, not net-tools. |
| 2006–2007 | Windows Vista ships the rewritten dual-stack "Next Generation TCP/IP" stack. ipconfig gains /release6, /renew6, /allcompartments, wildcard adapter names and the Temporary IPv6 Address line. Fedora 7 and later RHEL adopt NetworkManager by default. |
| 2009 | Debian's net-tools maintainers state on the debian-devel list that net-tools is unmaintained upstream and "should be considered obsolete", recommending iproute2. Linux distributions begin to plan its removal from default installs. |
| 2011 | Arch Linux drops net-tools from the base group. net-tools 1.60 remains what most systems ship; a community fork on SourceForge continues low-volume maintenance. |
| 2012 | Windows 8 and Server 2012 introduce the NetTCPIP, NetAdapter and DnsClient PowerShell modules (Get-NetIPConfiguration, Get-NetAdapter, Clear-DnsClientCache), the first serious alternative to ipconfig and netsh on Windows. |
| 2013 | systemd v197 introduces predictable network interface names (enp3s0); eth0 begins to disappear from new installs. systemd-networkd follows in 2014. |
| 2014 | RHEL 7 and CentOS 7 ship without net-tools installed. "ifconfig: command not found" becomes a common search. |
| 2016 | net-tools 2.10 (after a long gap, versioned 2.10 to follow the fork's 1.60 successors) is prepared; the new output format with flags=4163<UP,…> and inet 192.168.1.42 netmask … appears in distributions from 2017. Ubuntu 16.04 is the last Ubuntu LTS to install net-tools by default. Windows 10 Anniversary Update adds WSL, bringing Linux ip to Windows. |
| 2017 | iproute2 4.13 adds JSON output (ip -j). Ubuntu 17.10 switches to Netplan. |
| 2018 | Debian 10 (buster) freeze and Ubuntu 18.04 drop net-tools from the default install. Windows 10 1803 ships curl, 1809 ships OpenSSH and pktmon. |
| 2020–2021 | macOS Big Sur and Monterey; Apple begins removing the private airport tool's functions in favour of wdutil. net-tools 2.10 is formally released (2021). OpenBSD 6.9 replaces dhclient with dhcpleased. |
| 2022 | RHEL 9 removes the legacy network-scripts entirely; NetworkManager keyfiles become the only supported configuration. Ubuntu 22.10 adds netplan status. |
| 2023 | WSL 2.0 adds mirrored networking mode. Windows 11 adds DNS-over-HTTPS management via Get-DnsClientDohServerAddress. |
| 2024 | macOS 14.4 removes the airport binary. Ubuntu 24.04 replaces ISC dhclient (end-of-life upstream since 2022) with the built-in clients in NetworkManager and systemd-networkd. |
| 2025–2026 | FreeBSD 14.x, macOS 15/26, Windows 11 24H2 and later: ipconfig unchanged for nearly twenty years; BSD ifconfig still actively developed; Linux firmly on iproute2 with net-tools available as an optional package. |
Why ifconfig lasted so long on Linux
Three reasons. First, it worked: for a machine with one address per interface and one routing table, ifconfig and route were adequate, and that described most machines for a long time. Second, documentation inertia: every book, course and forum answer from the 1990s and 2000s used ifconfig, and the ip manual page was famously terse. Third, cross-platform habit: administrators who moved between Solaris, AIX, BSD and Linux had one command that worked everywhere. What finally tipped it was containers and virtualisation. Namespaces, veth pairs, bridges, VLANs and multiple addresses per interface became everyday things, and net-tools could neither create nor even display them correctly.
Why ipconfig never grew
Windows separated display from configuration early. ipconfig displayed; the Network Control Panel configured; netsh arrived in Windows 2000 as the scriptable configuration tool. With that division, there was no pressure to add setters to ipconfig, and Microsoft has been careful about changing its output because so many scripts parse it. PowerShell's object-based cmdlets gave scripters a better path in 2012, and ipconfig has been left as the quick human-readable view. Its last functional change was in Vista.
The two ipconfigs
Apple's ipconfig traces back to NeXTSTEP and the early Mac OS X IPConfiguration agent inside configd, which handles DHCP, BOOTP, manual and link-local configuration for each interface. The command is a client for that agent: it asks it what it knows (getifaddr, getpacket) or tells it to change mode (set en0 DHCP). It was never intended to resemble the Windows tool, and Apple's documentation for users points at networksetup instead. The coincidence trips up people who switch platforms and type ipconfig /all on a Mac, which prints the usage message. The macOS ipconfig in detail →
People
- Bill Joy, Sam Leffler, Mike Karels and the CSRG at Berkeley built 4.2BSD's networking and the original ifconfig.
- Fred van Kempen wrote the original Linux net-tools; Bernd Eckenfels and Phil Blundell maintained it through the 1.x series.
- Alexey Kuznetsov designed rtnetlink and wrote iproute2; Stephen Hemminger has maintained iproute2 since the mid-2000s.
- Dan Williams and Robert Love started NetworkManager at Red Hat.
- Lennart Poettering and Tom Gundersen wrote systemd-networkd and the predictable naming scheme.
- Microsoft's Windows NT networking team under Dave Cutler's NT project produced the first ipconfig; its output format is credited to the NT 3.5 TCP/IP team.