{ 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
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.