{ Abhilash Kumar Bhattaram : Follow on LinkedIn }

What is Oracle Linux AppStream ?

Application Stream (AppStream) is a concept introduced in RHEL 8 (and adopted by Oracle Linux 8 and others) that separates the core operating system packages from application-level packages.

The goal is to provide greater flexibility in managing software stacks without impacting the stability of the underlying OS.

Application Stream, or AppStream, is a software delivery concept introduced in Red Hat Enterprise Linux 8 (RHEL 8) and subsequently adopted by compatible distributions like Oracle Linux 8, CentOS Stream, AlmaLinux, and others.

It is designed to address one of the long-standing challenges in enterprise Linux environments:

-💡 How do you allow users to run newer versions of applications without compromising the stability or compatibility of the base operating system?

🧱 Separation of Concerns: BaseOS vs AppStream

This is probably the fundamental thing SRE's and DBA's need to be aware of In the AppStream model, the OS is split into two main repositories:

#1 BaseOS

  • Contains the core operating system components: the Linux kernel, low-level system tools, libraries, and utilities.
  • This layer is stable, minimal, and intended to remain unchanged for long periods.
  • Maintained with long-term support and security.

#2 AppStream

  • Contains user-space applications like databases (MySQL, PostgreSQL), programming languages (Python, Node.js), and tools (Git, GCC).
  • These are delivered in modular form, allowing multiple versions (called streams) of an application to coexist.

🎛️ How AppStream Modules Work

Each module in AppStream is a collection of packages related to a specific application. Modules are versioned through streams, so you can select the version that best suits your needs.

A module can have:

  • Streams: Different major versions (e.g., Node.js 10, 12, 14, etc.)
  • Profiles: Pre-configured installation options (e.g., common, server, development)
  • Defaults: One stream is marked as the default if no other is specified

As you can see below the [d] indicates postgres default AppStream

Postgres Default AppStream

How to install a custom Application Version

Well if you need a specific AppStream version as listed in the repo, you could just follow the example as below.

# dnf module enable postgresql:12
# dnf install postgresql-server

This avoids the need for third-party repos or manual builds , which why the concept of AppStream was built.

🧠 Why AppStream Is a Game-Changer

1.Supports Modern Dev Needs : Developers can use newer tools and runtimes without waiting for a new OS release.

2.Reduces Package Conflicts : You don’t have to break the system to get a newer Python or Node.js.

3.Simplifies DevOps and CI/CD : Different versions of the same software can be deployed across environments with consistency.

4.Compliance-Friendly : For organizations needing strict package controls, AppStream makes it easier to use approved, vendor-provided versions of apps—without mixing in community repos.

🔐 Bonus: Custom Repos with AppStream

  • Organizations can also create internal AppStream modules and serve them through approved YUM/DNF repos. This ensures:
  • Consistency across dev, staging, and production
  • Better compliance and auditability
  • Secure delivery of custom builds or internal apps

🚀 TL;DR ( ahem - Too Long , Did'nt Read )

  • AppStream = Freedom + Stability
  • You get to use the software versions you want (even newer ones), while your OS stays rock-solid and secure.

Watch out for my blog for more on Oracle and Linux stuff.