Chapter 9. Dynamic programming languages, web servers, database servers


The following chapter contains the most notable changes to dynamic programming languages, web servers, and database servers between RHEL 8 and RHEL 9.

Initial Application Streams versions in RHEL 9

RHEL 9 improves the Application Streams experience by providing initial Application Stream versions that can be installed as RPM packages using the traditional dnf install command.

RHEL 9.0 provides the following dynamic programming languages:

  • Node.js 16
  • Perl 5.32
  • PHP 8.0
  • Python 3.9
  • Ruby 3.0

RHEL 9.0 includes the following version control systems:

  • Git 2.31
  • Subversion 1.14

The following web servers are distributed with RHEL 9.0:

  • Apache HTTP Server 2.4
  • nginx 1.20

The following proxy caching servers are available:

  • Varnish Cache 6.6
  • Squid 5.2

RHEL 9.0 offers the following database servers:

  • MariaDB 10.5
  • MySQL 8.0
  • PostgreSQL 13
  • Redis 6.2

Some additional Application Stream versions will be distributed as modules with a shorter life cycle in future minor RHEL 9 releases.

Additional Application Streams available in RHEL 9

When planning to adopt or upgrade to RHEL 9, review the Red Hat Enterprise Linux Application Streams Life Cycle for any additional streams that you plan to use. Verify that their supported lifetime matches the lifecycle of your workloads.

Change of currency symbol for Bulgaria and Croatia in glibc locales

In RHEL 9.8, the C libraries configure the glibc locales for Bulgaria and Croatia to use the euro currency symbol. The relevant interfaces are not versioned, so the currency symbol changes immediately for all data that uses these locales, including existing data.

If your applications rely on currency formatting or parsing for the Bulgarian or Croatian locales, review their behavior after upgrading to RHEL 9.8. Verify that:

  • User interfaces correctly display the euro symbol instead of the previous currency symbol.
  • Any parsing, validation, or reporting logic that assumes the old currency symbol continues to work as expected or is updated accordingly.

The PostGIS extension is available for PostgreSQL

Starting with RHEL 9.7, the PostGIS extension is available for PostgreSQL. With this extension, PostgreSQL supports geographic objects, enabling spatial queries and analysis for Geographic Information System (GIS) applications, such as mapping, geolocation, and distance calculations within a relational database.

Major differences in the Python ecosystem since RHEL 8

The unversioned python command

The unversioned form of the python command (/usr/bin/python) is available in the python-unversioned-command package. On some systems, this package is not installed by default. To install the unversioned form of the python command manually, use the dnf install /usr/bin/python command.

In RHEL 9, the unversioned form of the python command points to the default Python 3.9 version and it is an equivalent to the python3 and python3.9 commands. In RHEL 9, you cannot configure the unversioned command to point to a different version than Python 3.9.

The python command is intended for interactive sessions. In production, it is recommended to use python3, python3.9, or python3.11 explicitly.

You can uninstall the unversioned python command by using the dnf remove /usr/bin/python command.

If you need a different python or python3 command, you can create custom symlinks in /usr/local/bin or ~/.local/bin, or use a Python virtual environment.

Several other unversioned commands are available, such as /usr/bin/pip in the python3-pip package. In RHEL 9, all unversioned commands point to the default Python 3.9 version.

Architecture-specific Python wheels

Architecture-specific Python wheels built on RHEL 9 newly adhere to the upstream architecture naming, which allows customers to build their Python wheels on RHEL 9 and install them on non-RHEL systems. Python wheels built on previous releases of RHEL are forward compatible and can be installed on RHEL 9. Note that this affects only wheels containing Python extensions, which are built for each architecture, not Python wheels with pure Python code, which is not architecture-specific.

Differences between the perl and perl-interpreter packages

RHEL 9 provides both the perl and perl-interpreter packages. The perl package is suitable for development because it contains the full Perl upstream distribution in dependencies, including GCC. On production systems, use the perl-interpreter package, which contains the main /usr/bin/perl interpreter.

Notable changes to libdb

RHEL 8 and RHEL 9 currently provide Berkeley DB (libdb) version 5.3.28, which is distributed under the LGPLv2 license. The upstream Berkeley DB version 6 is available under the AGPLv3 license, which is more restrictive.

The libdb package is deprecated as of RHEL 9 and might not be available in future major RHEL releases. Cryptographic algorithms have been removed from libdb in RHEL 9. Multiple libdb dependencies have been removed from RHEL 9.

Users of libdb are advised to migrate to a different key-value database. For more information, see the Knowledgebase article Available replacements for the deprecated Berkeley DB (libdb) in RHEL.

Tomcat available since RHEL 9.2

RHEL 9.2 introduces the Apache Tomcat server version 9. Tomcat is the servlet container that is used in the official Reference Implementation for the Java Servlet and JavaServer Pages technologies. The Java Servlet and JavaServer Pages specifications are developed by Sun under the Java Community Process. Tomcat is developed in an open and participatory environment and released under the Apache Software License version 2.0.

A new module stream: postgresql:18

RHEL 9.8 introduces PostgreSQL 18 as the postgresql:18 module stream.

Notable changes:

  • The new Asynchronous I/O (AIO) subsystem provides up to three times faster data reads. You can enable this subsystem by setting the io_method variable.
  • The MD5 authentication method is deprecated and will be removed in a future major PostgreSQL release.
  • By default, data page checksums are enabled in PostgreSQL 18. If you upgrade from a previous version with data page checksums disabled, you must either enable the feature before the update or disable it during the upgrade. For further details, see Upgrading from a RHEL 9 version of PostgreSQL 16 to PostgreSQL 18.
  • PostgreSQL 18 supports native OAUth 2.0 single sign-on authentication.
  • The database service supports Federal Information Processing Standards (FIPS) mode validation for regulated environments.
  • The pg_upgrade utility preserves statistics during major release upgrades and significantly faster reaches full performance after an upgrade.

A new module stream: mariadb:11.8

MariaDB 11.8 is available as a new module stream, mariadb:11.8.

Notable changes over the previously available version 10.11 include:

  • By default, MariaDB 11.8 uses the utf8mb4 character set instead of latin1 and legacy utf8 to ensure full Unicode support.
  • Vector support was added to support machine learning. This includes the VECTOR(N) data type and the following functions:

    • VEC_DISTANCE()
    • VEC_DISTANCE_EUCLIDEAN()
    • VEC_DISTANCE_COSINE()
    • Vec_FromText(json_array)
    • Vec_ToText(vector_column)
  • The mariadb-dump and mariadb-import utilities natively support parallel operations. Specify the --dir and --parallel options to dump or load multiple databases simultaneously.
  • The upper limit of the TIMESTAMP data type was increased from 2038-01-19 to 2106-02-07 while still using 4 bytes of storage.
  • The UUID_v4() and UUID_v7() functions were added.
  • The JSON handling was improved. This includes new functions, such as JSON_SCHEMA_VALID().
  • The following system variables were added to define the maximum storage for temporary tables and other internally created temporary files:

    • max_tmp_session_space_usage limits the disk space used per session
    • max_tmp_total_space_usage limits the total disk space used by the MariaDB server instance
  • The des_encrypt and des_decrypt configuration file parameters are deprecated and will be removed in a future MariaDB release.

Notable breaking differences:

  • The following utilities were renamed but symbolic links were created for backward compatibility:

    • mysql > mariadb
    • mysqldump > mariadb-dump
    • mysqladmin > mariadb-admin

    If you still use the previous names of these utilities, they display deprecation warnings.

  • The innodb_defragment configuration parameter is no longer supported. Remove it from your configuration files.

For more information about MariaDB, see Using MariaDB.

To install the mariadb:11.8 stream, enter:

# dnf module install mariadb:11.8

If you want to upgrade from MariaDB 10.11, see Upgrading from a RHEL 9 version of MariaDB 10.11 to MariaDB 11.8.

For information about the length of support for the mariadb module streams, see Red Hat Enterprise Linux Application Streams Life Cycle.

The mysql:8.4 module now includes the perl-DBD-MySQL package

This update adds the perl-DBD-MySQL package to the mysql:8.4 module. Starting with Red Hat Enterprise Linux (RHEL) 9.7, the perl-DBD-MySQL package is linked against libmysqlclient instead of libmariadb. To ensure compatibility, perl-DBD-MySQL is included within mysql:8.4. As a result, the perl-DBD-MySQL package is fully compatible with the mysql:8.4 module, which resolves dependency conflicts and installation failures.

Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat Documentation

Legal Notice

Theme

© 2026 Red Hat
Back to top