{"id":29918,"date":"2020-08-27T15:54:43","date_gmt":"2020-08-27T19:54:43","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=29918"},"modified":"2020-08-27T15:54:43","modified_gmt":"2020-08-27T19:54:43","slug":"why-did-mozilla-remove-xul-add-ons","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2020\/08\/27\/why-did-mozilla-remove-xul-add-ons\/","title":{"rendered":"Why Did Mozilla Remove XUL Add-ons?"},"content":{"rendered":"<p><a href=\"https:\/\/yoric.github.io\/post\/why-did-mozilla-remove-xul-addons\/\">David Teller<\/a>:<\/p>\n<blockquote cite=\"https:\/\/yoric.github.io\/post\/why-did-mozilla-remove-xul-addons\/\">\n<p>Firefox used to have a great extension mechanism based on the XUL and XPCOM. This mechanism served us well for a long time. However, it came at an ever-growing cost in terms of maintenance for both Firefox developers and add-on developers. On one side, this growing cost progressively killed any effort to make Firefox secure, fast or to try new things. On the other side, this growing cost progressively killed the community of add-on developers. Eventually, after spending years trying to protect this old add-on mechanism, Mozilla made the hard choice of removing this extension mechanism and replacing this with the less powerful but much more maintainable WebExtensions API.<\/p>\n<p>[&#8230;]<\/p>\n<p>XUL was developed at the time of HTML4, when web specifications were stuck in limbo, and was designed largely as a successor of HTML dedicated to applications instead of documents. Almost twenty years ago, Mozilla released a first version of XULRunner, which was basically an earlier version of Electron using XUL instead of HTML (HTML could also be inserted within XUL).<\/p>\n<p>[&#8230;]<\/p>\n<p>There was a catch, of course: the Servo team didn&rsquo;t have the resources to also reimplement XUL, especially since Mozilla had decided long ago to stop working on this technology. In order to be able to eventually replace Gecko (or parts thereof) with Servo, Mozilla first needed to migrate the user interface of Firefox to HTML5.<\/p>\n<\/blockquote>\n<p>Of course, not all extensions can be written with the newer system.<\/p>","protected":false},"excerpt":{"rendered":"<p>David Teller: Firefox used to have a great extension mechanism based on the XUL and XPCOM. This mechanism served us well for a long time. However, it came at an ever-growing cost in terms of maintenance for both Firefox developers and add-on developers. On one side, this growing cost progressively killed any effort to make [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2020-08-27T19:54:46Z","apple_news_api_id":"020e0778-fbd1-488c-aad6-96c0e7f73470","apple_news_api_modified_at":"2020-08-27T19:54:46Z","apple_news_api_revision":"AAAAAAAAAAD\/\/\/\/\/\/\/\/\/\/w==","apple_news_api_share_url":"https:\/\/apple.news\/AAg4HePvRSIyq1pbA5_c0cA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[326,279,295,81,346,30,32,1666,410,409,1078,866],"class_list":["post-29918","post","type-post","status-publish","format-standard","hentry","category-technology","tag-c-plus-plus","tag-firefox","tag-history","tag-html5","tag-javascript","tag-mac","tag-macapp","tag-macos-10-15","tag-mozilla","tag-servo","tag-thunderbird","tag-xml"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/29918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=29918"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/29918\/revisions"}],"predecessor-version":[{"id":29919,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/29918\/revisions\/29919"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=29918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=29918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=29918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}