История изменений
Исправление wandrien, (текущая версия) :
В линуксе нельзя статически прилинковать libc не сломав при этом всё.
musl. Но вообще да, проблема существует.
В винде не важно - линкуется ли libc статически илитдинамически - ты можешь загрузить все нужные тебе версии в процесс и они не ломают друг друга и не ломают софт на этом завязанный.
В винде еще и резолвинг имён при линковке иначе осуществляется.
Чтобы в линуксе было так же - надо вытащить системно-критические фичи вроде аллокатора и динамического загрузчика, а libc релаизовывать поверх. Тогда можно будет без проблем эти libc тащить с собой, не важно статически или в виде пакетов (аналога vcredist)
Я не вижу, как вытаскивание аллокатора и динамического загрузчика поможет решить проблему. Можешь привести кейсы, когда это актуально?
У glibc другая проблема со статической линковой - nss. Вся nss-машинерия, по хорошему, должна быть вынесена в отдельный процесс и запускаться как системный сервис. А программы бы просто подключались к нему по RPC. В libc остался бы простой переходник, в котором нечему ломаться по ABI.
Вообще качество архитектуры у GNU очень удручает. И архитектурные/инфраструктурные просчёты не чинятся десятилетиями, никто даже не пытается.
Исходная версия wandrien, :
В линуксе нельзя статически прилинковать libc не сломав при этом всё.
musl. Но вообще да, прблема существует.
В винде не важно - линкуется ли libc статически илитдинамически - ты можешь загрузить все нужные тебе версии в процесс и они не ломают друг друга и не ломают софт на этом завязанный.
В винде еще и резолвинг имён при линковке иначе осуществляется.
Чтобы в линуксе было так же - надо вытащить системно-критические фичи вроде аллокатора и динамического загрузчика, а libc релаизовывать поверх. Тогда можно будет без проблем эти libc тащить с собой, не важно статически или в виде пакетов (аналога vcredist)
Я не вижу, как вытаскивание аллокатора и динамического загрузчика поможет решить проблему. Можешь привести кейсы, когда это актуально?
У glibc другая проблема со статической линковой - nss. Вся nss-машинерия, по хорошему, должна быть вынесена в отдельный процесс и запускаться как системный сервис. А программы бы просто подключались к нему по RPC. В libc остался бы простой переходник, в котором нечему ломаться по ABI.
Вообще качество архитектуры у GNU очень удручает. И архитектурные/инфраструктурные просчёты не чинятся десятилетиями, никто даже не пытается.