Рыночные силы.
Специально для Linux гораздо больше программ, чем для * BSD. Большая часть исходного кода программного обеспечения достаточно переносима, чтобы его можно было скомпилировать на обоих, но многие производители программного обеспечения, которые поставляют двоичные файлы Linux, не заботятся о том, чтобы сделать это для BSD, поскольку они имеют меньшую долю рынка, чем Linux по всем направлениям. ¹
Если часть программного обеспечения доступна только в двоичной форме для другой ОС, эмуляция ABI - это один из способов заставить его работать, что и делают BSD.²
Когда-то давно, когда x86 Unix занимала большинство рынка по сравнению с Linux, в Linux была добавлена функция iBCS , позволяющая запускать двоичные файлы, созданные для SCO Unix и тому подобное. Интерес к этой функции снизился по мере увеличения рыночной доли Linux, так что во время серии разработок Linux 2.3 было позволено прийти в упадок .3 Судебные процессы SCO помогли вывести эту функцию из Linux. , но я считаю, что это вторично по сравнению с потерей рыночной силы, которая породила эту функцию.
Нет никаких технических причин, по которым Linux не смог бы когда-нибудь получить функцию, подобную iBCS, для запуска двоичных файлов BSD, но это маловероятно, если рыночные позиции BSD и Linux по какой-то причине не изменятся.
Сегодня такая вещь мало востребована. Сколько вам известно двоичных программ для BSD, которые также не созданы для Linux? Должны быть некоторые, но я предполагаю, что большинство из них предназначены для встроенных BSD, таких как Junos . Такая функция не будет создана, если она не позволяет запускать в Linux важный набор программ, которые иначе не запустились бы.
Сноски:
Я не считаю OS X здесь BSD , поскольку это отдельная проблема двоичной совместимости. FreeBSD, OpenBSD и NetBSD используют ELF на x86, тогда как OS X использует совершенно другой исполняемый формат . Динамическое связывание также сильно отличается в OS X от традиционных x86 BSD.
См. этот вопрос для получения дополнительной информации о двоичной совместимости Linux и OS X.
Как и в случае некоторых видов акул , программа, которая перестает двигаться вперед, умирает. Мы называем это явление гнилью , а не удушьем, когда оно происходит с программным обеспечением, но причина и следствие те же.
Контраст NDISwrapper ,что позволяет Linux запускать только двоичные драйверы сетевых карт, написанные для Windows XP. Выявлена потребность, и потребность удовлетворена. Где это нужно для запуска двоичных файлов, предназначенных только для BSD?
comm
— еще один инструмент для такого рода задач, с той лишь оговоркой, что для него требуются предварительно отсортированные источники данных. <(...)
синтаксис доступен в большинстве современных оболочек.
# suppress common lines
comm -3 <(echo "1\n2") <(echo "3\n1"| sort)
2
3
# display common lines
comm -12 <(echo "1\n2") <(echo "1\n3")
1