На данный момент рассмотрим Linux.
Для Linux первые два пункта имеют относительно низкую релевантность. Большинство программных продуктов с открытым исходным кодом, и многие пользователи привыкли строить из источника в любом случае. Для таких пользователей двоичная совместимость/повторное использование мало или вообще не имеет последствий (на самом деле многие пользователи могут отклонить все программное обеспечение, которое не распространяется в форме исходного кода).
Возможность загрузки и запуска (с ограниченными возможностями), когда компонент отсутствует, также чаще всего является проблемой с закрытым исходным кодом. Закрытое исходное программное обеспечение обычно имеет несколько версий с различными возможностями для поддержки разных цен. Поставщику удобно создавать одну версию основного приложения и предоставлять различные уровни функциональности в зависимости от того, какие другие компоненты поставляются/опущены.
Это, прежде всего, поддержка разных уровней цен. Когда программное обеспечение бесплатное, есть только одна цена и одна версия: awesome edition.
Доступ к библиотечным функциям между языками снова больше основан на исходном коде вместо двоичного интерфейса, например, с использованием SWIG, чтобы разрешить использование исходного кода на C или C++ с таких языков, как Python и Ruby. Опять же, COM в основном устраняет проблему, которая возникает в основном из-за отсутствия исходного кода; при использовании программного обеспечения с открытым исходным кодом проблема просто не возникает для начала.
Низкопрофильный RPC для кодирования в других процессах, похоже, в основном связан с программным обеспечением с закрытым исходным кодом. Когда/если вы хотите, чтобы Microsoft Excel мог использовать некоторые внутренние «вещи», например, в Adobe Photoshop, вы используете COM, чтобы они могли общаться. Это добавляет дополнительные накладные расходы и дополнительной сложности, но когда одна из частей кода принадлежит Microsoft, а другая - Adobe, это в значительной степени то, за что вы застряли.
В программном обеспечении с открытым исходным кодом, однако, если проект A имеет некоторые функциональные возможности, которые полезны в проекте B, то, что вы, скорее всего, увидите, является (не более) вилкой проекта A, чтобы превратить эту функциональность в библиотеку, которая затем привязаны как к остальной части проекта A, так и к проекту B, а также, возможно, проекты C, D и E - все, не налагая накладные расходы COM, сквозные RPC и т. д.
Теперь, «Не пойми меня неправильно: я не пытаюсь выступать в качестве представителя программного обеспечения с открытым исходным кодом, и не сказать, что закрытый источник ужасен, а с открытым исходным кодом всегда значительно выше. Что я сказал am, так это то, что COM определен в основном на двоичном уровне, но для программного обеспечения с открытым исходным кодом люди обычно имеют дело скорее с исходным кодом.
Редактировать: Возможно, я должен добавить, что SWIG был всего лишь одним из примеров нескольких инструментов, поддерживающих кросс-языковые разработки на уровне исходного кода. Хотя SWIG широко используется, COM отличается от него одним довольно важным способом: с COM вы определяете интерфейс на одном нейтральном языке, а затем генерируете набор языковых привязок (прокси и заглушки), которые соответствуют этому интерфейсу. Это сильно отличается от SWIG, где вы напрямую сопоставляетесь с одного источника на один целевой язык (например, привязки для использования библиотеки C из Python).
В мире с открытым исходным кодом есть также инструменты для определения интерфейса на языке определения нейтрального интерфейса, а затем сгенерируйте привязки для определенных языков из этого определения интерфейса. CORBA хорошо известна, но обычно рассматривается как большая и сложная, поэтому фактическое использование довольно минимально. Apache Thrift предоставляет некоторые из тех же общих возможностей, но в более простой, более легкий вес. В частности, когда CORBA пытается предоставить полный набор инструментов для распределенных вычислений (в комплекте со всем, от аутентификации до распределенного времени), Thrift гораздо более внимательно следит за философией Unix, пытаясь удовлетворить только одну потребность: создавать прокси и заглушки из определение интерфейса (написанное на нейтральном языке). Если вы хотите, чтобы сделать эти вещи, подобные CORBA, с помощью Thrift, вы, несомненно, можете, но в более типичном случае создания внутренней инфраструктуры, где вызывающий и вызывающий доверяют друг другу, вы можете избежать множества накладных расходов и просто продолжать бизнес под рукой.
https://en.wikipedia.org/wiki/D-Bus предоставляет несколько вещей, которые делает COM (позволяя одному компоненту разговаривать с другим) на linux, хотя совершенно по-другому. – jcoder