As of this morning the important guts of this work have landed to
mozilla-central and should ride the Firefox 53 trains. Here are the
technical details, for those interested:


   - The only XPCOM function intentionally exported from libxul is
   XRE_GetBootstrap. This function may be called once to get a class that
   allows firefox, xpcshell, plugin-container, etc to start.
   - The remaining guts of gecko are no longer exported: mozilla::Services,
   NS_InitXPCOM, NS_GetComponentManager and all the rest are internal-only.
   - There are a few helper functions for OS.File which are exported, which
   is not a problem in terms of blocking 3rd-party code.
   - The dependent XPCOM glue static library (xpcomglue_s) no longer exists.
   - The standalone XPCOM glue library (xpcomglue) still exists, with the
   sole purpose of loading libxul and calling XRE_GetBootstrap.

I want to publicly thank Mike Hommey, Eric Rahm, and Nathan Froyd for
helping with a bunch of tedious conversion/refactoring work to get this
reviewed and landed!

I intend to file a bug for us to stop shipping and building the Mozilla SDK.

Mike and I are both working on some cleanup work after this: rearranging
the files in xpcom/glue as well as making our startup code and sequence
less crazy and spread across many files and directories.

--BDS

On Tue, Aug 30, 2016 at 11:44 AM, Benjamin Smedberg <benja...@smedbergs.us>
wrote:

> This is notice of an intent to change how we export symbols from the
> Firefox DLLs and binaries.
>
> Currently our policy is that extensions may not include binary XPCOM
> components, and we've implemented some very basic rules that make it
> difficult for extensions to load these components. However, there is
> 3rd-party software that continues to use binary XPCOM: either by loading
> DLLs using ctypes and then using XPCOM, or injecting DLLs into the Firefox
> process.
>
> Binary injection has been the cause of numerous crash issues in Firefox,
> which commonly show up as startup crashes when a Firefox update is first
> run. I believe that solving these crashes is a critical part of our Firefox
> quality story and our ability to release Firefox updates in a timely manner.
>
> To that end, I believe that we should make it technically impossible for
> external DLLs to use XPCOM. I propose to do this in the following way:
>
> Integrate the remaining Firefox binary component back into xul.dll using
> internal linkage.
>
> Remove the XPCOM glue. This will involve reworking a little bit of how
> firefox.exe and plugin-container.exe initially load and launch gecko from
> xul.dll.
>
> Remove most of the XPCOM-related xul.dll exports, and as many other
> exports as possible.
> This includes all of the mozilla::services exports, as well as things like
> NS_GetComponentManager/NS_GetComponentRegistrar, and a lot of the XRE_
> functions like XRE_AddManifestLocation.
>
> Undecided: whether we can or need to remove the "frozen XPCOM string API"
> exports. I'd like to, but it's not strictly necessary to solve the primary
> stability issues of external code using binary XPCOM, and I'm not sure what
> it would affect or how hard it will be.
>
> I have prepared a list of current xul.dll exports from a recent nightly
> build, and proposed mitigations with bug numbers: https://docs.google.com/
> spreadsheets/d/1k2tFvEetMri2MT7viBM9iSVVt35dQH8O_mmNkYX9NOc/edit?usp=
> sharing
>
> It is likely that this project will affect Thunderbird and/or SeaMonkey,
> but I'm not sure in what ways. My understanding is that Thunderbird
> currently builds with internal linkage. I plan to keep Thunderbird informed
> of the work here, and accepting patches that help Thunderbird stay
> building, but I do not intend to significantly delay or WONTFIX this
> Firefox work for Thunderbird.
>
> https://bugzilla.mozilla.org/show_bug.cgi?id=1299187 is the tracking bug.
>
> Please direct followup comments & questions to dev-platform.
>
> --BDS
>
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to