As part of preparing xulrunner 1.9.2 (which would lead to Iceweasel 3.6), I have gone through all the patches currently applied to the latest xulrunner release, to keep track of what should be upstreamed, what needed feedback, what patches I needed to update in upstream bugzilla, etc.
As I have talked about our differences with upstream on a few occasions already, and as I was doing this grunt work anyway, I thought it would be nice to make the results public.
First, a few reference numbers (excluding changes to generated configure
files):
- Changes between upstream 1.9.0.1 and Debian release 1.9.0.1-1: 85 files changed, 1163 insertions(+), 644 deletions(-)
- Changes between upstream 1.9.0.16 and Debian release 1.9.0.16-1: 86 files changed, 1177 insertions(+), 634 deletions(-)
- Changes between upstream 1.9.1 and Debian release 1.9.1-1: 70 files changed, 770 insertions(+), 363 deletions(-)
- Changes between upstream 1.9.1.6 and Debian release 1.9.1.6-1: 76 files changed, 796 insertions(+), 380 deletions(-)
- Changes between upstream 1.9.1.5 and upstream 1.9.1.6: 165 files changed, 3094 insertions(+), 1387 deletions(-)
- Changes between upstream 1.9.1 and upstream 1.9.1.6: 1263 files changed, 64322 insertions(+), 67376 deletions(-) (though more than half of that relates to upstream bump of sqlite3 and the vorbis stack)
A few observations on the above data:
- There are less changes between upstream and Debian than between two consecutive upstream versions.
- Debian changes only account for changes to the xulrunner package, i.e. it excludes changes to Iceweasel itself, or to nspr or nss, but these are far less important in number.
- The number of changes applied decreases when switching to a new upstream branch. This is mostly due to patches getting applied upstream.
- Debian patches on a given branch are pretty stable. In other words, most of the work is done on the first release of the branch.
The latter used to be true, but is not anymore: xulrunner 1.9.1.6-2 added a lot of changes and is now up to: 98 files changed, 1107 insertions(+), 517 deletions(-).
What happened ? will you ask me. A lot happened: the test suite, attempts at correctly installing C++ headers and IDL files, bug fixes. Work has also been done such that make clean/distclean
doesn't leave stuff around and that xulrunner can be properly built twice in a row.
Differences between 1.9.1.6-1 and 1.9.1.6-2 look like this: 31 files changed, 341 insertions(+), 167 deletions(-).
Some were stolen from bugzilla (13 files changed, 162 insertions(+), 70 deletions(-)):
Many others were sent:
- Test suite issues (2 files changed, 3 insertions(+), 4 deletions(-)):
make clean/distclean
issues (10 files changed, 28 insertions(+), 15 deletions(-)):
- Other issues (8 files changed, 112 insertions(+), 49 deletions(-)):
A few others were filed without a patch, as I felt a proper upstreamable patch needed discussion (3 files changed, 16 insertions(+), 3 deletions(-)):
A few changes are related to the way we build and how we run the test suite (5 files changed, 35 insertions(+), 18 deletions(-)):
- Disable python-xpcom tests for now.
- Disable javaxpcom tests at build time when DEB_NO_JAR is unset.
- Synchronize config/rules.mk and js/src/config/rules.mk for check-sync-dirs.py (we used to localize the changes required in each config/rules.mk, but as we now run make check they need to be synchronized)
- Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=455238
Finally, a few were related to the Debian changes history (2 files changed, 1 insertions(+), 26 deletions(-)):
- Remove --enable-system-lcms check, which somehow resisted merges with upstream
- Properly clean xulrunner/installer/*.system.conf
Going through the rest of the changes between upstream and the latest Debian release, we can split in 5 categories of changes:
Those that were picked from upstream, or sent and eventually applied in 1.9.2 or trunk (12 files changed, 68 insertions(+), 41 deletions(-)):
Those that were picked from bugzilla or sent there, but are not applied upstream for various reasons (29 files changed, 138 insertions(+), 209 deletions(-)):
Those that were reported but for which I wanted feedback for a proper fix, yet a patch was applied in Debian because this was necessary (6 files changed, 22 insertions(+), 13 deletions(-)):
Those that are yet to be sent to bugzilla (15 files changed, 111 insertions(+), 54 deletions(-)):
- xulrunner-config: Give more appropriate cflags and libs
- Install applications in /usr/local/lib instead of /usr/lib
- Unhide release notes link in about: but only if app.releaseNotesURL is defined
- In about:, Don't put an about:blank link when there is no vendorURL defined
- Don't use static strings when setting environment variables
- Exec instead of uselessly forking in xulrunner launcher script
- Disable optimization on alpha for the url-classifier component (this will probably wait for the test suite failures on various architectures to be fixed)
- Build js shell and xpcshell against system libreadline
- Don't export js_SetTraceableNativeFailed, which is only used internally
- Increase stability and performance on mips and mipsel
And finally, the changes that are either Debian specific or not deemed upstreamable (30 files changed, 460 insertions(+), 77 deletions(-) ; this can sound huge, but see the details below):
- Feature changes:
- Disable APNG support when system libpng doesn't support it (6 files changed, 71 insertions(+), 10 deletions(-) ; mostly #ifdef'ing parts of the code related to animation)
- Use application.ini from where the xulrunner-stub lies (1 files changed, 14 insertions(+), 3 deletions(-) ; This one may be dropped and replaced by something totally different, possibly upstreamed)
- Don't register plugins if the MOZILLA_DISABLE_PLUGINS environment variable is set (1 files changed, 25 insertions(+), 0 deletions(-) ; very useful to isolate plugin-related crashes ; I don't think it's worth upstreaming considering the upcoming plugin-in-separate-process work)
- Remove (un|)registering system (1 files changed, 0 insertions(+), 43 deletions(-) ; xulrunner versions that are installed by a package manager don't need to be registered, since the package does it already ; a variant that conditionally removes it may be upstreamable)
- Preferences changes:
- Set javascript.options.showInConsole (1 files changed, 1 insertions(+), 0 deletions(-))
- Set DPI to system settings (1 files changed, 1 insertions(+), 1 deletions(-))
- Cosmetic changes:
- Install loading_16_grey.gif in classic.jar, and add an override for loading16.png (1 files changed, 2 insertions(+), 0 deletions(-) ; Since we don't support APNG, we replace the most used one by its (ugly) GIF equivalent)
- Add links for about:bugs and about:README.Debian in about: (3 files changed, 19 insertions(+), 0 deletions(-) ; I'd like to make that something living in debian/extra-stuff)
- Integration changes:
- Add another preferences directory for applications: defaults/syspref (1 files changed, 2 insertions(+), 0 deletions(-))
- Add an rpath to libpyloader.so and _xpcom.so (2 files changed, 2 insertions(+), 0 deletions(-) ; allows python xpcom to work out of the box)
- Forward-port nsIBadCertListener from 1.8 (4 files changed, 266 insertions(+), 1 deletions(-) ; This is necessary for at least galeon and kazehakase, because the new interface is useless for embedding applications)
- Build-related changes:
- Allow to override the PYTHON_SO variable (1 files changed, 1 insertions(+), 1 deletions(-))
- Put the crmf library before the NSS libraries (1 files changed, 1 insertions(+), 1 deletions(-))
- Allow to build java jar files in 2 pass (2 files changed, 8 insertions(+), 2 deletions(-))
- Avoid libxpcom being excluded from linked libraries by -Wl,--as-needed (1 files changed, 2 insertions(+), 0 deletions(-))
- Ignore system libjpeg, libpng and zlib version checking (1 files changed, 3 insertions(+), 3 deletions(-))
- Force to not use -fshort-wchar (1 files changed, 1 insertions(+), 1 deletions(-))
- Add soversion to libmozjs (2 files changed, 19 insertions(+), 2 deletions(-) ; useful for couchdb, libjavascript-perl and others)
- Don't build example component (1 files changed, 0 insertions(+), 1 deletions(-))
- Don't install system profile (1 files changed, 0 insertions(+), 2 deletions(-))
Note, the numbers in the various diff stats obviously don't add up, since some changes overlap.
All that information doesn't account the few additional components added in debian/filemonitor and debian/extra-stuff, that account for nearly 600 lines (excluding licensing boilerplate), but I'll talk about these in another post.
This analysis also helped spotting another harmless merge error (the first one was spotted a few weeks ago and just left the --enable-system-lcms around, without any effect): a variable replacement in a Makefile that doesn't have any effect, since the 2 variables have the same value. Only a pointless 1 line change.