<code>httpd</code> may want to add <code>Requires: web-assets-httpd</code> (or ship the configuration itself, though [https://lists.fedoraproject.org/pipermail/packaging/2013-July/009313.html it was suggested that it would be better seperate]) to make the assets directory available unconditionally by default. This will simplify packaging. (We really would prefer that JavaScript libraries not depend on httpd, as they could be used by Node.js or Ruby.)

<code>httpd</code> may want to add <code>Requires: web-assets-httpd</code> (or ship the configuration itself, though [https://lists.fedoraproject.org/pipermail/packaging/2013-July/009313.html it was suggested that it would be better seperate]) to make the assets directory available unconditionally by default. This will simplify packaging. (We really would prefer that JavaScript libraries not depend on httpd, as they could be used by Node.js or Ruby.)

+

+

=== Fonts ===

+

+

Now that we're going to make many of the free fonts in the distribution available over the Internet, we'd like to take the opportunity to make sure the licensing metadata is populated in each of them so we can be sure we're complying with their licenses.

+

+

There are [http://patches.fedorapeople.org/js-repoqueries/fonts-neither 80 fonts in 28 packages] that are currently missing the necessary data. These will be cleaned up for F20, and [User:Patches/PackagingDrafts/FontsPolicy new guidelines] will be put into effect to ensure this is done in the future.

Web Assets

Summary

Traditionally, Fedora has been pushing bits from its various servers to people's browsers in an ad-hoc fashion, and issues surrounding JavaScript have been swept under the rug. This change proposal provides a simple framework for shipping static web content and a way forward to treat JavaScript more closely to other code in the distribution.

Owner

Current status

Detailed Description

A standard directory (/usr/share/web-assets) for static bits that are intended to be delivered to web browsers, such as CSS Frameworks, UI libraries, etc. will be introduced. HTTP daemons in the distribution should make this directory available publicly as /_sysassets.

Additionally, a standard directory (/usr/share/javascript) for JavaScript code, which may be used in browsers or server-side by applications such as nodejs or rubygem-execjs will also be introduced.

redhat-rpm-config

We can trivially automatically version the virtual Provides required by the static inclusion section of the new guidelines, but the macro would need to live in redhat-rpm-config to work right in koji without conditional inclusion, which results in terrible syntax like %{?js_includes: %js_includes foopackage} due to RPM's restrictions regarding macros that accept arguments.

httpd

httpd may want to add Requires: web-assets-httpd (or ship the configuration itself, though it was suggested that it would be better seperate) to make the assets directory available unconditionally by default. This will simplify packaging. (We really would prefer that JavaScript libraries not depend on httpd, as they could be used by Node.js or Ruby.)

Fonts

Now that we're going to make many of the free fonts in the distribution available over the Internet, we'd like to take the opportunity to make sure the licensing metadata is populated in each of them so we can be sure we're complying with their licenses.

There are 80 fonts in 28 packages that are currently missing the necessary data. These will be cleaned up for F20, and [User:Patches/PackagingDrafts/FontsPolicy new guidelines] will be put into effect to ensure this is done in the future.

JavaScript packagers

Some longstanding reviews (like jquery) can now be completed with clear guidelines, paving the way for web applications to start being migrating to using proper dependencies instead of bundling.

All web applications currently in the distribution should be examined for bundled JavaScript, which should be packaged separately.

Web application packagers

Web applications can migrate to new JavaScript/Web Asset packages as they become available.

There are a lot of potentially affected packages. There's no hope of fixing them all in one release cycle, and even the dependency chain for jQuery, a big ticket package, could take several months to get reviewed and imported. Therefore, this Change proposal just seeks FESCo/FPC approval for a start to unravelling this madness. This will be a long transition, and will probably make the systemd transition look like a day in the park.

Just to give you an idea of the magnitude: there are 1836 packages that ship .js files, discounting Node.js packages. (Though those certainly all don't necessarily include bundled JS.) There's a lot of low-hanging fruit: for instance, there are 963 packages that ship a file called jquery.js, a whole bunch of which is just included as output from documentation generators like Sphinx or rdoc. (Though keep in mind that isn't necessarily the only JS these packages bundle.) More low hanging fruit can be gleamed from this list of frequencies of filenames ending in .js.

Foreign languages

Many foreign languages support JavaScript, like Ruby via rubygem-execjs or Java via rhino. Several of them already depend on existing JavaScript library packages (virtually all node.js-related ones) and will need to be modified to conform to the new locations specified by the guidelines.

Node.js

Several node packages ship JavaScript for the browser and will need to be modified to conform to the new guidelines.

FPC

The Fedora Packaging Committee will need to consider and approve drafts pertaining to Web Assets and JavaScript.

FPC/FESCo

FPC/FESCo may or may not want to consider a firm date for sunsetting the bundled JavaScript exception and requiring all new packages to meet the new guidelines.

Upgrade/compatibility impact

None at this time.

Web Applications migrating their dependencies to the new framework will need to take care to provide a sane upgrade path, but that should be relatively simple.

FAQ

Why is /usr/share/javascript outside of /usr/share/assets?

Using /usr/share/javascript allows for consistency with other distributions (like Debian) and reflects the fact that JavaScript code can be run on Fedora itself as well as being pushed to the browser.

Why not just ship Apache configuration files for this kind of stuff like we've been doing/has been suggested before?

That leaves other http daemons and servers that don't involve traditional HTTP daemons (like many Node.js applications) hung out to dry. By just using a single, standard directory, and making that accessible from all HTTP daemons, support for many HTTP daemons is provided, and the need for packagers to keep up with changing Apache configuration formats just to ship a few simple JS files is eliminated.

Contingency Plan

None needed, either the directories get added or they don't.

Documentation

The new Packaging Guidelines referenced above.

Release Notes

Fedora 20 introduces standard directories for web assets (such as web user interface libraries) in /usr/share/web-assets, and JavaScript code in /usr/share/javascript. In future releases, web applications will be migrated to using shared components, eliminating the need for security updates to the same code in multiple packages.