История изменений
Исправление ZenitharChampion, (текущая версия) :
Понимаю что достал некоторых людей, например Waker, но повторюсь. Может быть кому-то пригодится.
Собирайте в CentOS 5. Чем старее используемый GLIBC, тем больше количество дистрибутивов Linux, в которых запустится программа. В этом дистрибутиве используется GLIBC 2.4, что означает «линукс 2007 года и новее»: SUSE 10.1-13.1, Ubuntu 6.10-13.10, Fedora 6-20, RHEL 5-6, Debian 4-7. Огромное количество дистрибутивов Linux, в которых всё будет просто работать.
Что делать с GCC 2007 года - обновить до нового, а дистрибутив готовой программы расширить файлом «run.sh» и каталогом lib (можно lib32 и lib64, а в свете последних событий с драйвером NVIDIA и libarm), в который положить файл libstdc++.so.6 от нового компилятора (это C++ Runtime). И тогда юзер никогда не увидит ошибки в консоли о том что требуется новый glibc (а это означает обновление дистрибутива), а разработчикам не придётся пользоваться старым компилятором.
Что делать с зависимостями. Например Ubuntu: 6.10, 7.04, 7.10, 8.04, 8.10, 9.04, 9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10. 15 версий. Как проприетарщина умудряется работать в любой версии одинаково? Например Crossover Wine, игры из Humble Bundle, Java и Firefox с сайта разработчика, Opera, LibreOffice, Nero Linux и спираченная Maya Linux? Может они носят все зависимости с собой? Такие программы бывают, но среди этих программ их нет, а Flash Player вообще идёт одним файлом. Тогда как?
Существует Linux Standard Base, базирующийся на RHEL 5 (именно поэтому я советую CentOS 5). С ним поддерживают совместимость все популярные дистрибутивы Linux. LSB - это когда в вашем /usr/lib по две версии одной и той же библиотеки: libjpeg62 и libjpeg8, libpng12 и libpng17, GTK2 и GTK3 - стандарт охватывает много библиотек. Таким образом, линкуя программу со старыми/стабильными версиями системных библиотек, которые есть везде, можно сэкономить размер дистрибутива программы.
Ну вот например, на дворе 2009 год и вы портировали свою программу на Linux. Компилировали в Ubuntu 9.04. Вышел Ubuntu 9.10 и пользователи жалуются что ваша программа не работает: поменялся libpng. На самом деле поменялось почти всё. Вы компилируете программу в Ubuntu 9.10 - тогда пользователи, у которых всё работало, говорят что у них не работает. Вдруг к ним присоединятся пользователи Ubuntu 10.04 LTS. Тогда вы заявляете что в Linux «зоопарк дистрибутивов», «нет стандартов» и прекращаете выпускать новые версии программы под Linux. Ситуация применима и в наши дни для Ubuntu 13.04 и 13.10.
А компилируя приложения в CentOS 5 по стандарту LSB, вы делаете программу работающей для всех. Возможно что к одиного лежащей в каталоге lib libstdc++.so.6 добавится также новый GTK2, ведь GTK 2.10 из CentOS 5 может показаться вам старым (список версий библиотек из RHEL). В случае игр в lib обычно кладутся libopenal и libSDL - во всяком случае, в 90% игр для Linux, которые я видел. Ведь в стандарт они не входят и не обязаны быть в любой системе. Также вместе с Braid идёт libCg, а вместе с Arx Fatalis libIL, которых тоже может не оказаться в системе пользователя.
Исправление ZenitharChampion, :
Понимаю что достал некоторых людей, например Waker, но повторюсь. Может быть кому-то пригодится.
Собирайте в CentOS 5. Чем старее используемый GLIBC, тем больше количество дистрибутивов Linux, в которых запустится программа. В этом дистрибутиве используется GLIBC 2.4, что означает «линукс 2007 года и новее»: SUSE 10.1-13.1, Ubuntu 6.10-13.10, Fedora 6-20, RHEL 5-6, Debian 4-7. Огромное количество дистрибутивов Linux, в которых всё будет просто работать.
Что делать с GCC 2007 года - обновить до нового, а дистрибутив готовой программы расширить файлом «run.sh» и каталогом lib (можно lib32 и lib64, а в свете последних событий с драйвером NVIDIA и libarm), в который положить файл libstdc++.so.6 от нового компилятора (это C++ Runtime). И тогда юзер никогда не увидит ошибки в консоли о том что требуется новый glibc (а это означает обновление дистрибутива), а разработчикам не придётся пользоваться старым компилятором.
Что делать с зависимостями. Например Ubuntu: 6.10, 7.04, 7.10, 8.04, 8.10, 9.04, 9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10. 15 версий. Как проприетарщина умудряется работать в любой версии одинаково? Например Crossover Wine, игры из Humble Bundle, Java и Firefox с сайта разработчика, Opera, LibreOffice, Nero Linux и спираченная Maya Linux? Может они носят все зависимости с собой? Такие программы бывают, но среди этих программ их нет, а Flash Player вообще идёт одним файлом. Тогда как?
Существует Linux Standard Base, базирующийся на RHEL 5 (именно поэтому я советую CentOS 5). С ним поддерживают совместимость все популярные дистрибутивы Linux. LSB - это когда в вашем /usr/lib по две версии одной и той же библиотеки: libjpeg62 и libjpeg8, libpng12 и libpng17, GTK2 и GTK3, стандарт охватывает много библиотек. Таким образом, линкуя программу со старыми/стабильными версиями системных библиотек, которые есть везде, можно сэкономить размер дистрибутива программы.
Ну вот например, на дворе 2009 год и вы портировали свою программу на Linux. Компилировали в Ubuntu 9.04. Вышел Ubuntu 9.10 и пользователи жалуются что ваша программа не работает: поменялся libpng. На самом деле поменялось почти всё. Вы компилируете программу в Ubuntu 9.10 - тогда пользователи, у которых всё работало, говорят что у них не работает. Тогда вы заявляете что в Linux «зоопарк дистрибутивов», «нет стандартов» и прекращаете выпускать новые версии программы под Linux. Ситуация применима и в наши дни для Ubuntu 13.04 и 13.10.
А компилируя приложения в CentOS 5 по стандарту LSB, вы делаете программу работающей для всех. Возможно что к одиного лежащей в каталоге lib libstdc++.so.6 добавится также новый GTK2, ведь GTK 2.10 из CentOS 5 может показаться вам старым (список версий библиотек из RHEL). В случае игр в lib обычно кладутся libopenal и libSDL - во всяком случае, в 90% игр для Linux, которые я видел. Ведь в стандарт они не входят и не обязаны быть в любой системе. Также вместе с Braid идёт libCg, а вместе с Arx Fatalis libIL, которых тоже может не оказаться в системе пользователя.
Исходная версия ZenitharChampion, :
Понимаю что достал некоторых людей, напрмиер Waker, но повторюсь, может быть кому-то пригодится.
Собирайте в CentOS 5. Чем старее используемый GLIBC, тем больше количество дистрибутивов Linux, в которых запустится программа. В этом дистрибутиве используется GLIBC 2.4, что означает «линукс 2007 года и новее»: SUSE 10.1-13.1, Ubuntu 6.10-13.10, Fedora 6-20, RHEL 5-6, Debian 4-7. Огромное количество дистрибутивов Linux, в которых всё будет просто работать.
Что делать с GCC 2007 года - обновить до нового, а дистрибутив готовой программы расширить файлом «run.sh» и каталогом lib (можно lib32 и lib64, а в свете последних событий с драйвером NVIDIA и libarm), в который положить файл libstdc++.so.6 от нового компилятора (это C++ Runtime). И тогда юзер никогда не увидит ошибки в консоли о том что требуется новый glibc (а это означает обновление дистрибутива), а разработчикам не придётся пользоваться старым компилятором.
Что делать с зависимостями. Например Ubuntu: 6.10, 7.04, 7.10, 8.04, 8.10, 9.04, 9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10. 15 версий. Как проприетарщина умудряется работать в любой версии одинаково? Например Crossover Wine, игры из Humble Bundle, Java и Firefox с сайта разработчика, Opera, LibreOffice, Nero Linux и спираченная Maya Linux? Может они носят все зависимости с собой? Такие программы бывают, но среди этих программ их нет, а Flash Player вообще идёт одним файлом. Тогда как?
Существует Linux Standard Base, базирующийся на RHEL 5 (именно поэтому я советую CentOS 5). С ним поддерживают совместимость все популярные дистрибутивы Linux. LSB - это когда в вашем /usr/lib по две версии одной и той же библиотеки: libjpeg62 и libjpeg8, libpng12 и libpng17, GTK2 и GTK3, стандарт охватывает много библиотек. Таким образом, линкуя программу со старыми/стабильными версиями системных библиотек, которые есть везде, можно сэкономить размер дистрибутива программы.
Ну вот например, на дворе 2009 год и вы портировали свою программу на Linux. Компилировали в Ubuntu 9.04. Вышел Ubuntu 9.10 и пользователи жалуются что ваша программа не работает: поменялся libpng. На самом деле поменялось почти всё. Вы компилируете программу в Ubuntu 9.10 - тогда пользователи, у которых всё работало, говорят что у них не работает. Тогда вы заявляете что в Linux «зоопарк дистрибутивов», «нет стандартов» и прекращаете выпускать новые версии программы под Linux. Ситуация применима и в наши дни для Ubuntu 13.04 и 13.10.
А компилируя приложения в CentOS 5 по стандарту LSB, вы делаете программу работающей для всех. Возможно что к одиного лежащей в каталоге lib libstdc++.so.6 добавится также новый GTK2, ведь GTK 2.10 из CentOS 5 может показаться вам старым (список версий библиотек из RHEL). В случае игр в lib обычно кладутся libopenal и libSDL - во всяком случае, в 90% игр для Linux, которые я видел. Ведь в стандарт они не входят и не обязаны быть в любой системе. Также вместе с Braid идёт libCg, а вместе с Arx Fatalis libIL, которых тоже может не оказаться в системе пользователя.