Estou olhando para a saída de:
% file -b /lib/x86_64-linux-gnu/*.so | grep ", for" | colrm 1 130 | sort -u
=5018237bbf012b4094027fd0b96fc22a24496ea4, for GNU/Linux 3.2.0, not stripped
9f21d, for GNU/Linux 3.2.0, stripped
bee51, for GNU/Linux 3.2.0, stripped
, for GNU/Linux 3.2.0, stripped
sha1]=2e5abcee94f3bcbed7bba094f341070a2585a2ba, for GNU/Linux 3.2.0, stripped
O que há de especial no GNU/Linux 3.2.0? Isso está em um sistema Debian/bullseye (amd64).
Em outras palavras: qual API/funcionalidade foi introduzida no GNU/Linux 3.2.0 (modelo de thread, funções de segurança...) que é tão importante? A configuração explícita da versão necessária impedirá o usuário de usar alguns LD_ASSUME_KERNEL
valores, portanto, suponho que haja uma boa razão para rejeitar valores antigos, como LD_ASSUME_KERNEL=2.4.19
(por exemplo).
No passado, a biblioteca GNU C tinha sua versão mínima do kernel periodicamente alterada, o que normalmente permitia uma série de simplificações. A biblioteca C contém muito código para lidar com variações entre versões do kernel, por exemplo, novas chamadas de sistema usadas preferencialmente quando possível. Aumentar a versão mínima do kernel significa que o código que lida com variações mais antigas pode ser descartado.
3.2.0 só é significativo porque é a última versão do kernel para a qual a biblioteca GNU C passou por esse processo. Foi iniciado por Joseph Myers em janeiro de 2016 , quando 2.6.32 (a versão mínima anterior do kernel) chegou ao fim de sua vida útil. 3.2 era o kernel suportado mais antigo na época.
O aumento em si foi implementado em dois commits, primeiro para todas as arquiteturas não x86 em fevereiro de 2016 e depois para arquiteturas x86 em maio de 2017 . (O atraso estava relacionado a problemas de suporte do OpenVZ.) Houve muitos outros patches de acompanhamento para remover código desnecessário ou simplificar o código, por exemplo, esta simplificação do
recvmmsg
.Isso não significa que a biblioteca GNU C não suporte recursos adicionados ao kernel Linux desde 3.2.0; isso acontece, de várias maneiras. Alguns recursos são suportados como melhorias ( por exemplo
clone3
), outros são simplesmente disponibilizados ( por exemploclose_range
), outros são disponibilizados com fallbacks de compatibilidade ( ou seja , o trabalho feito pela nova chamada de sistema é feito pela biblioteca se a chamada de sistema não estiver disponível) .Você também pode construir a biblioteca C com um requisito para uma determinada versão do kernel, com a
--enable-kernel
opção de configuração.