Dynamic Programming Languages, Web and Database Servers

The following features, enhancements, and changes related to programming languages, web servers, and database servers are introduced in this Oracle Linux 10 release.

Python Released at Version 3.12

Oracle Linux 10 includes Python 3.12 as the default Python implementation. Python is distributed as a non-modular python3 package in the BaseOS repository and is typically installed by default. Python 3.12 includes full life cycle support on Oracle Linux 10. Other versions of Python 3 with a shorter life cycle, available through the AppStream repository, are installable in parallel. /usr/bin/python and other Python-related commands, such as pip, are available in the unversioned form and point to the default Python 3.12 version. Notable enhancements compared to Python 3.11 include:
  • A new type statement and type parameter syntax for generic classes and functions.
  • Formatted string literal (f-strings) formalized in the grammar and can now be integrated into the parser directly.
  • A unique per-interpreter global interpreter lock (GIL).
  • You can now use the buffer protocol from Python code.
  • To improve security, the built-in hashlib implementations of the SHA1, SHA3, SHA2-384, SHA2-512, and MD5 cryptographic algorithms are replaced with formally verified code from the HACL* project. The builtin implementations remain available as fallback if OpenSSL doesn't provide them.
  • Dictionary, list, and set comprehensions in CPython are now inlined to increase the speed of a comprehension execution.
  • CPython now works with the Linux perf profiler.
  • CPython now provides stack overflow protection on supported platforms.
  • Python 3.12 is compiled with GCC’s -O3 optimization flag, which is used by default in upstream, for improved performance.
To install packages from the Python 3.12 stack, you can use the following commands:
# dnf install python3
# dnf install python3-pip
To run the interpreter, you can use the following commands:
$ python
$ python3
$ python3 -m pip --help

Perl Released at Version 5.40

Perl version 5.40, includes the following changes from the 5.32 version:
  • Core enhancements:
    • Unicode 15.0 available.
    • -g command-line option, an alias for the umask option -0777.
    • The -M command-line option accepts a space.
    • builtin module now includes documentation for new always-present functions.
    • try/catch feature for exception handling.
    • Deprecation warnings now have specific subcategories to provide finer-grained control. Note that you can still disable all deprecation warnings in a single statement.
    • The @INC hooks are enhanced with the new $INC variable and INCDIR method.
    • Forbidden control flow out of the defer and finally modules is now detected at compile-time.
    • Using (?{ …​ }) and (??{ …​ }) in a pattern now disables various optimizations globally in that pattern.
    • The limit for the REG_INF regex engine quantifier is increased from 65,536 to 2,147,483,647.
    • The new regexp variable ${^LAST_SUCCESSFUL_PATTERN} allows access to the last successful pattern that matched in the current scope.
    • A new __CLASS__ keyword
    • Perl now provides the ^^ logical XOR operator.
  • Incompatible changes:
    • A physically empty sort function now triggers a compile-time error.
    • The readline() function no longer clears the stream error and EOF flags.
    • INIT blocks no longer run after an exit() function inside a BEGIN block.
    • Calling the import method on an unknown package now produces a warning.
    • The return function no longer allows an indirect object.
    • Changes in errors and warnings can now cause failures in tests.
  • Deprecations:
    • The use of the ' character as a package name separator is deprecated.
    • The switch feature and the smartmatch operator ~~ are deprecated.
    • Using the goto function to jump from an outer scope into an inner scope is deprecated.
  • Internal Changes:
    • Multiple deprecated C functions have been removed.
    • Internal C API functions are now hidden with the __attribute__((hidden)) attribute on the platforms that support it. This means they're no longer callable from XS modules on those platforms.
  • Modules:
    • The Term::Table and Test2::Suite modules have been added to Perl Core.
    • Most modules are updated.

For more information, see the perl5340delta, perl5360delta, perl5380delta, and perldelta man pages.

Ruby Released at Version 3.3.7

Ruby version 3.3.7 includes performance enhancements, fixes, and several new features, including:

  • The new Prism parser provides an alternative to Ripper. See https://github.com/ruby/prism for more information.
  • YJIT, the Ruby just-in-time (JIT) compiler is stable and is updated for performance improvements. Use this compiler in production.
  • The Regexp matching algorithm includes security enhancements.
  • The M:N thread scheduler is available.
  • Use the Lrama LALR parser generator instead of Bison.
  • The Racc gem is now a bundled gem.

Node.js Released at Version 22

Node.js version 22 includes the following changes from version 20:
  • V8 JavaScript engine version 12.4.
  • V8 Maglev compiler enabled by default on architectures where available. For example, the AMD/Intel 64-bit architectures and the 64-bit ARM architecture.
  • Maglev improves performance for short-lived CLI programs.
  • npm package manager version 10.8.1.
  • node --watch mode now considered stable. In watch mode, changes in watched files cause the Node.js process to restart.
  • The browser-compatible implementation of WebSocket is now considered stable and enabled by default. A WebSocket client to Node.js is therefore available without external dependencies.
  • Node.js includes an experimental feature for execution of scripts from package.json. To use this feature, run the node --run <script-in-package.json> command.

MySQL Released at Version 8.4

MySQL version 8.4 includes the following notable changes since 8.0:
  • mysql_native_password authentication plugin is deprecated and no longer enabled by default.
  • User accounts or roles with the BINLOG_ADMIN privilege automatically receive the TRANSACTION_GTID_TAG privilege after upgrading to MySQL 8.4.
  • The mysql_upgrade_history file is created or updated in the server’s data directory when installing MySQL 8.4. The file is in JSON format and includes information about the version installed, date, and time of installation, and whether the release was part of a Long-Term Support (LTS series) or an Innovation series.
  • The use of the % and _ characters as wildcards in database grants is deprecated. These characters are treated as literals. They're already treated as literals when the partial_revokes server system variable is set to ON.
  • The treatment of the % character by the server as a synonym for localhost when checking privileges is deprecated.
  • Use the --tls-version and --admin-tls-version server system variables. The deprecated --ssl and --admin-ssl server options and have_ssl and have_openssl server system variables are removed.
  • Use the authentication_policy server system variable. The deprecated default_authentication_plugin system variable is removed.
  • Use the SET_ANY_DEFINER privilege for definer object creation and the ALLOW_NONEXISTENT_DEFINER privileges for orphan object protection. The deprecated SET_USER_ID privilege is removed.
  • The deprecated mysql_upgrade utility is removed.

For more information, see the MySQL documentation.