Comparing Cisco IOS, NX-OS, and IOS-XR

career success Mar 28, 2017

It was 1989 when I first laid hands on a Cisco router. Specifically, it was a Cisco AGS+ router. Well, actually, it was called a “brouter,” because it did both bridging (software-based Layer 2 switching) and routing. The version of Cisco IOS it ran was some flavor of 7.x, but at that time, the operating system had not been given the Internetwork Operating System (IOS) name.

Since that time, Cisco has paraded out a variety of additional operating systems, many of which are now defunct. Some of those operating systems came through acquisitions. For example, in the mid-1990s, Cisco started building up their line of Cisco Catalyst switches by acquiring Grand Junction, Kalpana, and Crescendo. Switches coming from these various lineages ran different operating systems. Cisco also came out with different operating systems for their hubs, load balancers, security appliances, unified messaging modules, etc. However, Cisco IOS was long viewed as the defacto Cisco operating system, running on both a wide range of Cisco routers and Cisco Catalyst switches. Interestingly though, a couple of other Cisco operating systems have risen to prominence and are in widespread use today, specifically: NX-OS and IOS-XR.

The purpose of this blog post is to give you a sense for the major differences between traditional Cisco IOS, NX-OS, and IOS-XR, along with where you’re likely to find each one. First, let’s contrast these at a high level: 

  • Cisco IOS: Found in “borderless networks” (i.e. networks that allow “anyone, anywhere, and on any device” to connect with a corporate network). For example, a Cisco 3900 Series ISR2 router runs Cisco IOS.
  • Cisco NX-OS: Found on Cisco Nexus switches located in data centers. For example, a Cisco Nexus 7000 Series switch runs Cisco NX-OS.
  • Cisco IOS-XR: Found on Cisco service provider routers. For example, a Cisco XR 12000 Series router runs Cisco IOS-XR. 

For a time, there were three organizationally seperate groups within Cisco that developed these operating systems. Fortunately, these three groups have now been consolidated under a common organizational unit within Cisco. This organizational consolidation has already led to more consistency between these diverse operating systems. However, significant differences still exist. To better understand the fundamental differences, let’s consider some of the main characteristics of each OS:

Cisco IOS

Although the “IOS” name came later, the operating system dates back to the mid-1980s. Cisco IOS was developed using the C programming language and had several limitations indicative of when it was developed. For example, it did not support symmetric multiprocessing. As a result, one instruction had to be completed before another instruction could begin to be executed. Another huge architectural limitation was the use of a shared memory space. Since all processes used the same pool of memory, and a misbehaving OSPF process (as an example) could wreak havoc on other router processes.

Some router platforms did have workarounds. As an example, I used to administer a Cisco 7513 modular router. That router could be equipped with a Versatile Interface Processor (VIP) module, which allowed individual line cards to run their own instances of Cisco IOS. That provided some level of load balancing and redundancy.

NOTE: Another version of Cisco IOS you might have heard of is IOS-XE, which runs Cisco IOS on Linux. You might, as an example, find Cisco IOS-XE running on a Cisco ASR 1000 Series router. Thanks to the feature set of Linux, Cisco IOS-XE adds support for symmetric multiprocessing and separate memory spaces. However, other than its Linux underpinnings, Cisco IOS-XE is basically the same as traditional Cisco IOS. So, I didn’t give it a separate treatment in this blog article.

Cisco NX-OS

Originally named SAN-OS (where the SAN acronym stood for Storage Area Network), NX-OS offers some vast architectural improvements over traditional Cisco IOS. Although it was originally a 32-bit operating system, it has since evolved into a 64-bit OS. Unlike Cisco IOS, NX-OS doesn’t share a single memory space, and it does support symmetric multiprocessing. It also allows preemptive multitasking, which allows a high priority process to get CPU time ahead of a lower priority process.

NX-OS is built on a Linux kernel, and it natively supports the Python language for creating scripts on Cisco Nexus switches. Additionally, it has multiple high availability features, and it doesn’t load all of its features at once. Instead, you can specify which features you wish to activate. Eliminating the running of unnecessary features frees up memory and processor cycles for those features you do want. However, when it comes to configuration, there are many similarities between NX-OS and Cisco IOS.

Cisco IOS-XR

Originally designed for 64-bit operation, IOS-XR offers many of the enhancements found in NX-OS (e.g. symmetric multiprocessing, separate memory spaces, and activating only services that are needed). However, while NX-OS is built on a Linux kernel, IOS-XR is built on the QNX Neutrino Microkernel. QNX is similar to UNIX and is now owned by BlackBerry.

A feature IOS-XR offers that is not found in NX-OS is the ability to have a single instance of the operating system controlling multiple chassis. Also, since IOS-XR targets service provider environments, it offers support for interfaces such as DWDM and Packet over SONET.

While IOS-XR configuration does bear some similarity to traditional Cisco IOS, the differences are much more noticeable, as compared to the differences found in NX-OS. As one example, when you’re finished entering configuration commands, you need to commit your changes to make them take effect and before exiting configuration mode.

Configuration Examples

To illustrate some basic configurations on these three operating systems, consider the following examples. These commands were given on Cisco IOS router, NX-OS switch, and IOS-XR router instances running within Cisco VIRL. Each of the following examples shows the current router or switch OS version. Then we enter global configuration mode and change the router or switch hostname, followed by the creation of a Loopback 0 interface, assigning an IP address to that interface, exiting back out to privilege mode, and issuing the show ip interface brief command.

When assigning IP addresses to the Loopback interfaces on the devices, notice that Cisco IOS requires the subnet mask be entered in dotted decimal notation, while NX-OS and IOS-XR support entering the subnet mask in slash notation (i.e. using /32 instead of Also, notice that we have to issue the commit command on IOS-XR before exiting configuration mode. Also, only when we issue that command does our updated hostname configuration get applied.

Cisco IOS

Cisco NX-OS

Cisco IOS-XR


Well, that’s a side-by-side look at Cisco IOS, NX-OS, and IOS-XR. If you want to go deeper into this topic, I highly recommend watching the replay of Joe Rinehart’s CiscoLive presentation, NX-OS, IOS, IOS-XR, Unique and Similar at the Same Time. I attended his presentation live in Las Vegas last year, and it was the inspiration for this post. Click HERE for the replay of his excellent session (Cisco Live account required).

Kevin Wallace, CCIEx2 (R/S and Collaboration) #7945