Cross Platform Component Object Model ( XPCOM ) — кроссплатформенная компонентная модель от Mozilla . Она похожа на Component Object Model (COM), Common Object Request Broker Architecture (CORBA) и системную объектную модель (SOM). Она включает в себя множественные языковые привязки и описания языка описания интерфейса (IDL); таким образом, программисты могут подключать свои пользовательские функции к фреймворку и связывать его с другими компонентами.
Наиболее заметное использование XPCOM происходит в веб-браузере Firefox . Многие из его внутренних компонентов взаимодействуют через интерфейсы XPCOM. Кроме того, Firefox раньше позволял надстройкам обширный доступ к XPCOM, но в 2017 году это было удалено и заменено менее разрешительным API WebExtensions . [1] [2] (Два форка Firefox по - прежнему поддерживают возможность надстройки XPCOM: Pale Moon [3] и Basilisk [4] )
XPCOM — одна из главных вещей, делающих среду приложений Mozilla фактическим фреймворком. Это среда разработки, которая предоставляет следующие возможности для разработчика кроссплатформенного ПО:
Эта компонентная объектная модель делает практически все функциональные возможности Gecko доступными в виде серии компонентов или повторно используемых кроссплатформенных библиотек , к которым можно получить доступ из веб-браузера или скрипта из любого приложения Mozilla. Приложения, которым необходимо получить доступ к различным библиотекам Mozilla XPCOM ( сети , безопасность , DOM и т. д.), используют специальный слой XPCOM, называемый XPConnect , который отображает интерфейсы библиотеки в JavaScript или других языках. XPConnect склеивает интерфейс с компонентами на основе языков программирования C++ , C или Rust в XPCOM, и его можно расширить, включив поддержку скриптов для других языков: PyXPCOM [5] уже предлагает поддержку Python . wxWidgets [6] обеспечивают поддержку Perl , и ведутся работы по добавлению поддержки языка Common Language Infrastructure (CLI) и Ruby для XPConnect.
Для разработчиков XPCOM позволяет писать компоненты на C++ , C , JavaScript , Python или других языках, для которых созданы специальные привязки, а также компилировать и запускать эти компоненты на десятках различных платформ, включая эти и другие, где поддерживается Mozilla.
Гибкость повторного использования компонентов XPCOM из библиотеки Gecko и разработки новых компонентов, работающих на разных платформах, облегчает быструю разработку приложений и приводит к более производительному и простому в обслуживании приложению. Например, сетевая библиотека представляет собой набор компонентов XPCOM, к которым может получить доступ и которые может использовать любое приложение Mozilla. Файловый ввод-вывод, безопасность, управление паролями и профили также являются отдельными компонентами XPCOM, которые программисты могут использовать при разработке собственных приложений.
XPCOM добавляет много кода для маршаллинга объектов, и в эпоху Netscape XPCOM чрезмерно использовался для внутренних интерфейсов, где он на самом деле не был необходим, что приводило к раздуванию программного обеспечения . [7] Это было основной причиной, по которой в 2001 году Apple разветвила KHTML , а не Gecko, чтобы создать движок WebKit для своего браузера Safari . [8]
С тех пор Mozilla устранила часть раздувания XPCOM. [9] К 2008 году это в сочетании с другими усилиями привело к значительному повышению производительности Gecko . [10]