ENGINE code removed from the OpenSSL Library
OpenSSL 4.0, to be released in April 2026, is the first major release since 3.0 which replaced the ENGINE interface with Providers. Removing ENGINEs is a primary goal of this major release and this post describes the change agreed to by both the OpenSSL Corporation and OpenSSL Foundation.
Summary
All symbols defined in openssl/engine.h have been removed from the
shared library in
OpenSSL 4.0. Applications that use the ENGINE API will fail to compile
using the default build settings. This behavior matches what happens
in previous versions when building OpenSSL with the no-engine
configuration
option
with current versions. Up-to-date applications should not include
openssl/engine.h at all.
In order to ease the transition for applications that support the
ENGINE API, it will be possible to compile with stub macros to avoid
compilation errors. Since, even in 3.x, ENGINEs may fail to load at
run time, many applications gracefully handle the scenario where an
ENGINE is unavailable and can continue anyway. Those applications
could be compiled with OPENSSL_ENGINE_STUBS defined (by adding
-DOPENSSL_ENGINE_STUBS to compilation flags, for example) to enable
the stub implementations and continue to work without having to make
any code changes at all. When using the stubs the only supported value
for the ENGINE argument will be NULL which means no engine.
As a reminder, OpenSSL 3.5, which includes the ENGINE API, is a long term stable (LTS) release supported until April 8, 2030.
Details
The ENGINE API was released in OpenSSL 0.9.6 on 24 September 2000. It was originally designed for supporting external cryptography devices, but ENGINEs proved useful for plugging in replacement implementations of cryptographic algorithms.
On 7 September 2021, OpenSSL 3.0 was released with support for providers which are a more flexible way to introduce code into an application that uses OpenSSL. They were designed to overcome the known limitations of the ENGINES interface. For instance, ENGINEs were tied to the already defined set of algorithms and your couldn’t really add new algorithms.
The default provider supplies a large set of useful built-in algorithms, so providers are central to the OpenSSL model. Providers also allow applications to swap in third-party algorithms in order to increase cryptographic agility.
Now that ENGINEs have been superseded by providers, the ENGINE API along with its serious limitations and use of already deprecated structures has served its purpose. It adds to the complexity and size of the OpenSSL code base, so removing ENGINEs was a priority for OpenSSL 4.0. Removing other deprecated functionality is still under discussion.
To preview the ENGINE removal, see this PR which implemented the change. It has been merged into the default branch on the OpenSSL repository.