From 43be7b05a74f484fd5217079ab74cb12a0bb162e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Tue, 5 Aug 2025 12:40:48 +0300 Subject: [PATCH] mdbx: enabling older Linux kernels starting from 3.16 --- src/api-env.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/api-env.c b/src/api-env.c index 358dc56f..53d76e42 100644 --- a/src/api-env.c +++ b/src/api-env.c @@ -208,10 +208,19 @@ __cold int mdbx_env_create(MDBX_env **penv) { } #if defined(__linux__) || defined(__gnu_linux__) - if (unlikely(globals.linux_kernel_version < 0x04000000)) { - /* 2022-09-01: Прошло уже более двух лет после окончания какой-либо - * поддержки самого "долгоиграющего" ядра 3.16.85 ветки 3.x */ - ERROR("too old linux kernel %u.%u.%u.%u, the >= 4.0.0 is required", globals.linux_kernel_version >> 24, + if (unlikely(globals.linux_kernel_version < 0x03100000)) { + /* 2025-08-05: Ядро 3.16 выпущено 11 лет назад и было самым долго поддерживаемым из 3.x до июля 2020. + * Три года назад (в 2022) здесь была заблокирована работа на ядрах меньше 4.x, как устаревших и для которых + * крайне затруднительно обеспечить какое-либо тестирование. Теперь же я решил изменить решение и разрешить + * работу на старых ядрах начиная с 3.16, логика тут такая: + * - поведение старых ядер уже точно не будет меняться, + * а в текущем коде libmdbx есть всё необходимое для работы начиная с 3.16; + * - есть широко-используемые проекты (Isar), которым требуется поддержка старых ядер; + * - сейчас тестирование для 4.x также затруднено, как и для 3.16, уже не приносит какого-либо облегчения + * с тестированием и мне приходится полагаться на гарантии совместимости API ядра и glibc/musl; + * - использование возможностей из новых ядер всё равно требует проверок/ветвлений; + * = поэтому сейчас нет причин отказываться от работы на 3.16 поддерживая ядра 4.0 */ + ERROR("too old linux kernel %u.%u.%u.%u, the >= 3.16 is required", globals.linux_kernel_version >> 24, (globals.linux_kernel_version >> 16) & 255, (globals.linux_kernel_version >> 8) & 255, globals.linux_kernel_version & 255); return LOG_IFERR(MDBX_INCOMPATIBLE);