On Tue, Jan 23, 2018 at 4:34 PM, Gregory Szorc <g...@mozilla.com> wrote:

> Speaking as a maintainer of the Firefox build system, we try to be
> conservative about the set of dependencies required to build Firefox from
> source. We recognize that every required dependency is a potential source
> of failure and complexity. Dependencies can create complications for
> packagers. From a build system perspective, it's in our best interest to
> minimize the dependencies required to build Firefox.
>
> Our desire to keep things simple can be at odds with the wishes of Firefox
> developers who wish to leverage new and exciting tools and technologies. In
> short, the policy of minimizing build dependencies can externalize costs
> onto overall Firefox development by hindering people from using better
> tools. This adversely affects the development velocity of Firefox and can
> cause product quality to suffer.
>
> For a few years now, various pockets of Firefox development have wanted to
> use Node.js as part of the development workflow. I wouldn't say they
> directly want to use Node.js: they want to use the large ecosystem of tools
> built around Node.js. But that's splitting hairs. Our build system policy
> has been that leveraging Node.js and its ecosystem for supplemental
> workflows is fine, but shipping a build dependency on Node.js is not. Many
> Firefox developers are now using Node.js in their day-to-day workflow for
> things like running ESLint. We're using Node.js in CI. But we're not
> forcing people to have Node.js installed to build Firefox.
>
> Various groups have routed around the limitation that Node.js can't be
> required to build Firefox. There are now Firefox features that do require
> Node.js to build. However, the output from the Node.js tools is checked
> into the Firefox source repository. So from the perspective of the Firefox
> build system, Node.js doesn't exist and therefore isn't a build dependency.
>
> The status quo is not ideal. The more people I speak with, the more
> apparent it is that our current policy of not allowing Node.js tooling in
> the build system is causing more problems than it is preventing. Speaking
> as the build system module owner and someone who cares about developer
> workflows, tooling, and developer productivity, I don't think the current
> policy is good for Mozilla.
>
> I'd like to start a discussion about requiring Node.js to build Firefox.
>
> What do I mean by "require Node.js?" Let's assume I mean having a usable
> Node.js executable on the host system to be used during a Firefox build.
>
> What about npm or a package manager? I would strongly prefer to limit the
> required dependency to Node.js itself. While the Firefox build system would
> depend on 3rd party packages and tools (such as Babel), I'm pretty
> insistent (as a build system maintainer) that these dependencies be
> vendored into the Firefox source repository so as to not incur a run-time
> dependency on a packaging service. I've seen the chaos that "left-pad"
> caused. I don't fully trust the security model of JavaScript package
> distribution. I don't think we can risk the ability to build Firefox or the
> integrity of the Firefox product by the availability and integrity of a 3rd
> party packaging service. That may sound like a harsh thing to say. But it's
> the posture we've applied elsewhere (such as to Python packages and PyPI).
> So, this means that all JavaScript executed by Node.js as part of the build
> would either be provided by Node.js itself or the Firefox source
> repository. If we needed to use a package manager as part of the build,
> that package manager could be vendored in the Firefox repository along with
> other JavaScript libraries (not unlike how we currently vendor Python's pip
> package manager).
>
> A few people at Mozilla have poked at this problem already. We have a
> general sense of where some pain points for us will be. We know that
> getting modern versions of Node.js installed on various distributions
> requires using 3rd party package repositories. We know that Windows support
> could be painful. We know that installing common packages can result of
> dozens if not hundreds of dependencies being added. We know this could lead
> to us having to install thousands of files as part of the Firefox build -
> an overhead I'm not keen on seeing. We know all of this can add up to a
> significant amount of overhead to support. (Yet it still feels like a
> lesser problem than having people work around not being able to use Node.js
> directly.)
>
> What we don't generally know is the impact requiring Node.js would have on
> downstream packagers. Our adoption of Rust last year was a long and
> sometimes painful process. I have a feeling that requiring Node.js would be
> a similar experience. But like Rust, I feel that adopting Node.js is in the
> best long-term interest for Firefox development velocity and product
> quality. I'm reluctant to cause more hardship by introducing a new build
> dependency. But it's very difficult to keep saying we can't use Node.js in
> the Firefox build system. I wish I could say "we'll build SpiderMonkey and
> use that instead." Unfortunately, many Node.js tools don't work with
> SpiderMonkey, so that's not an option. Plus there are difficulties with
> cross-compilation. As sad as it makes me to say it, SpiderMonkey is not an
> option: Node.js is the only viable option.
>
> If we require Node.js to build Firefox, what are the requirements,
> desires, and hardships of downstream packagers and consumers of the Firefox
> build system? Keep in mind that mozilla-central right now is Firefox 60.
> That will become ESR 60 in May.
>

Quick follow-up. First to add mozilla-linux-taskforce. Second to note that
we almost certainly wouldn't make a change before Firefox 61. That would
give everyone only caring about ESR an extra ~1 year to deal with fallout.
_______________________________________________
dev-builds mailing list
dev-builds@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-builds

Reply via email to