Our goal is to get information to people. Keeping the site design simple helps accomplish that.
Please be considerate of all who access our web pages, and accommodate them, including those who use text-only browsers or old browsers, as well as those with slow connections. We wish to prevent web designs that look great under one version of one browser, and ugly under many others. Of course, please don't install any of the proprietary web browsers available if you don't already use them anyway.
/software/
that describe specific programs. By our
principles, documentation must be
free. So these pages must carry
a free
license. If such a page doesn't have a free license, please report the
problem to <webmasters@gnu.org>.“
…”
” and
“‘
…’
”
are preferred over straight quotes ("..." and '...').
This doesn't apply to script-generated documents.index.html
should only be used as a symbolic link, as
explained next.index.html
to the top-level HTML file
for that directory. Use the .symlinks
file to handle this.article.html
, and
its translations article.lang.html
—
lang
should contain the two-letter language code from ISO 639,
and optionally an hyphen followed the two-letter country code given in
ISO 3166 (lowercase). For example, the German translation of not-ipr.html
should be named not-ipr.de.html
; the Brazilian Portuguese
translation should be named not-ipr.pt-br.html
./
(e.g., /gnu/about-gnu.html
; not
http://www.gnu.org/gnu/about-gnu.html
, and not
about-gnu.html
). This makes it easier to copy and paste
links from other pages. Besides, links like
http://www.gnu.org/
will be wrong when the visitor uses
HTTPS.//www.example.org
) if it does./gnu/gnu.html
, not just
/gnu/
. Never use index.html
in a URL. Both of
these are kindnesses to the user, as browsers change the highlighting on
a link after it has been visited. If links to a given file use several
different URLs, the URLs that haven't been explicitly referenced will
not be highlighted as visited. So the user goes to pages he/she has
already seen, which is irritating. Also, this eases maintenance of the site
as things get moved around.id
attribute.README
file, information of what versions are
available, documentations, fonts, etc.). Also, it means that the FTP
location URLs do not need to be changed, on this and other sites, as new
versions are released into that directory.Cite people with e-mail addresses this way:
<a href="//www.stallman.org/">Richard Stallman</a>
<a href="mailto:rms@gnu.org"><rms@gnu.org></a>
which browsers display this way:
Richard Stallman <rms@gnu.org>
It is less confusing to the user, because it's clear what is a link
to another web page and what is a mailto:
anchor that
will bring up a mail form to fill out and send, if this is
supported by the client. Also, if users save a copy of the page,
they will have a copy of the e-mail address they can use without
going back to their web browser. If the person doesn't have a web
page, leave the name unanchored.
www
CVS repository along with the rest of the
www.gnu.org pages, it's important that the URL used to embed the asset
be a subdomain of gnu.org, so that the Third-party Request Blocker
add-on shipped with GNU IceCat would not consider it a third-party
asset which it would prevent from being loaded. For example, when
embedding videos from FSF campaigns on www.gnu.org, use
static.gnu.org
rather than static.fsf.org
.
Both of these addresses have been set to point to the same machine, so
they can be used interchangeably.<html>
, <head>
,
<title>
, <body>
, etc. when using (X)HTML,
and always include the appropriate DTD or Schema reference.
This appeases overly pedantic web browsers.
<link rel="author" href="mailto:webmasters@gnu.org">
- GNU Project - Free Software Foundation
.<acronym>
: HTML 5 obsoletes it in
favor of <abbr>
.<abbr>
unless for a really
compelling reason. Browsers render it in an ugly way.<abbr title="Expanded
Abbreviation">EA</abbr>
or EA
(Expanded Abbreviation)
.EA
./layout.css
; it covers most of our use cases./print.css
. Note that the header, navigation
bars and footer (except copyright and license) are unprintable./layout.css
, some pages have specialized
stylesheets: /graphics/graphics.css
for the GNU Art section,
and /side-menu.css
for the Malware and Education sections.header.html
and banner.html
. If the
style applies to a single element, it should normally be added as an attribute./gnu.css
, which in turn loads /mini.css
(the Yahoo User Interface reset and base stylesheet, version 2),
as these pages are
usually very basic, plain pages with little or no formatting./style.css
;/style.css
and adds a few more definitions;
it is used by gendocs.sh
to
regenerate Texinfo manuals./style.lang.css
) that
modify layout.css according to their own needs. The RTL languages (Arabic,
Persian, and Hebrew) use /style.rtl.css
.<img src="/graphics/*.jpg"
alt=" [DESCRIPTIVE TEXT] ">
Adjust image width or height in a style attribute, using scalable
units such as em
or %
; for instance:
<img src="/graphics/*.jpg"
alt=" [DESCRIPTIVE TEXT] "
style="width: 10em; height: auto;" />
This way, the page will look the same if the reader increases or decreases font size.
layout.css
(the stylesheet for templated pages),
you may want to use the imgright
or imgleft
class
(defined in the IMAGES section of the stylesheet). This will ensure that
the floating direction is reversed if the page is translated into an RTL
language.pict
classes that are defined in the IMAGES section of
layout.css
(you can adjust the width in a style
attribute if none of the predefined ones fits your needs); for instance:
<div class="pict wide"
style="width: 25em"><img src="/graphics/*.jpg"
alt=" [DESCRIPTIVE TEXT] "
/></div>
div
container is necessary because some browsers (e.g.,
NetSurf) don't know how to apply max-width
to images.Link all images that are displayed throughout the website to the
relevant page, usually in /graphics/
. This can be done with
code similar to this, which corresponds to the image on the left:
<p class="imgleft"> <a href="/graphics/agnuhead.html"> <img src="/graphics/gnu-head-sm.jpg" alt=" [Image of the Head of a GNU] " style="width: 8em" /></a> </p>This will allow users to quickly go to pages related to the pictures they are interested in.
One of the most complex aspects of maintaining web pages is following the linking guidelines; however, it's also a very crucial aspect of the job.
We strive to ensure that all pages we promote—all pages which are given links on our site—are friendly to the free software movement. Some pages will obviously not meet such standards; if the site flames the Free Software Foundation and/or the GNU Project, or has no apparent relation to free software and surrounding issues, the link shouldn't be made. Beyond that, however, there are criteria used in determining whether or not it is appropriate to provide a link to a page from ours. They are listed below, in order of descending general importance.
The link's purpose on our site will play a role in determining how strongly it should be judged against the other criteria. Pages hosting GNU projects will be held to the highest standards. Pages about other free software and given high promotion—for example, included in a newsfeed on the main page—are a close second. Links on the philosophy page may be given more leeway in talking about proprietary software; GNU/Linux user group pages should call the system GNU/Linux almost always but are hardly checked on other criteria. Always keep this in mind when deciding how to weigh each aspect of these policies.
The big point made by the free software movement is that proprietary software presents an ethical dilemma: you cannot agree to such nonfree terms and treat those around you as you would like to be treated. When proprietary software is promoted, people get the impression that it is okay to use it, while we are trying to convince them otherwise. As such, we avoid offering such free advertising, either directly on our site or indirectly through links.
What's tricky about this criteria is the “promotion” point: there's a difference between mentioning proprietary software and making a sales pitch for it. Indeed, the GNU Project website mentions proprietary software throughout, but never gives people the impression that its use does not present ethical problems.
There are two things to keep in mind when determining whether a reference to proprietary software promotes it, or simply mentions it. First, how much information does it offer about the software? Second, how much information is the reader likely to actually gain from this page?
Different pages provide different amounts of information about proprietary software; the more it provides, the more of a problem it poses for us. For example, some pages may link to the primary site for a proprietary software program. Others may describe its functionality in detail. Even the product name given matters; there's a difference between “Windows” and “Microsoft Windows XP Home Edition.”
The subject of the reference will also play a role in determining how problematic a reference is. If the software is already very popular, it's unlikely that a basic mention of it will be news to the reader. Some examples of proprietary software which are common enough to be considered “well-known” are major operating systems (Windows, Mac OS, Sun OS, HP-UX) and primary common applications such as Office, Internet Explorer, Chrome, Photoshop, Acrobat Reader, and Flash.
GNU software project pages feel the full force of this policy. Proprietary software should only be mentioned when the GNU software provides support for it, or to compare it against the features of well-known proprietary software. For example, the following text—and not much else—would be acceptable:
w3 is a web browser for GNU Emacs, similar to Internet Explorer. It can run on all platforms GNU Emacs runs on, including GNU/Linux, proprietary Unix systems, and Windows.
Links which appear in other areas, such as the testimonials or philosophy pages, as well as links to user groups or third party organizations, may discuss such software in greater detail, but links and other methods of encouragement to “learn more” should still be avoided.
Almost all pages which have links on our site should, at the very least, treat free software and open source equally. Failure to do so—whether it be by omitting free software or by implying that open source is superior—is usually unacceptable. GNU software project pages should have little mention of open source. Here's an example of a tactful way to do it:
XYZ is part of the GNU Project, and is free/libre software (sometimes referred to as open source software).
Any exceptions to this rule should be apparent from the context. For instance, user group pages or pages of organizations listed in links.html may talk in greater detail about open source; we state on those pages, “The FSF is not responsible for the contents of other websites, or how up-to-date their information is.”
Pages which we link to should treat the GNU Project well. The primary thing to look out for in this regard is whether the page calls the system GNU/Linux or just “Linux.” GNU software projects and user group pages should almost never, if ever, fail to do this. Again, exceptions for other pages should be apparent from context.
That said, certain parts of a page should not be considered against these criteria. For example, suppose we were to make a link to a page on a free software news site. Any advertisements or reader comments attached to the article would not be considered when determining whether it met our linking guidelines, since they're understood to be the opinion of their individual authors. Similarly, on user group or third party organization pages, the contents of forums and wiki pages should not hold weight in these regards.
Finally, some sites are understood to always have exception with most of these guidelines. These sites are usually about issues which are important, but somewhat peripheral, to the free software movement. Several times we have linked to the Electronic Frontier Foundation's site, even though they encouraged the use of Flash, talked exclusively about open source software, and do not advocate users' freedom to redistribute and change software. It's generally understood that since these pages are not primarily about free software, the policies do not hold full force for them.
As a final explanation (coming from RMS): Even for making links from www.gnu.org, we do not require that people call the system GNU/Linux or use the term “free software” rather than “open source.” We do, however, require that they not promote any nonfree software.
If all this seems complicated, that's because, unfortunately, it is. Don't worry; a knack for it comes with time and experience. You may mis-evaluate a few pages as you're learning to get a feel for what's acceptable and what isn't; please don't hesitate to get a second opinion from a more experienced webmaster, or someone in charge like the Chief Webmaster or RMS. New exceptions will always come up; keep an open mind to that possibility and be ready to handle them properly.
If the page requires nonfree, nontrivial JavaScript and has serious failures with JavaScript disabled, the link shouldn't be made. Similarly, if the page has embedded Flash that plays an important role, so that a person would be missing something important if the videos do not play, the link should not be made.
In some cases, however, we can still refer to such pages and resources by using workarounds to bypass the JavaScript requirement.
One possibility is to use an instance of GotHub—a free software frontend for GitHub that works without JavaScript—to replace links to pages and resources hosted at GitHub, a website that requires running nonfree JavaScript to be usable as intended.
Currently (March 2024), GotHub is not actively maintained and it lacks some functionalities. For example, it doesn't offer a way to browse repositories or download the source code without visiting the GitHub website, and it doesn't provide a git clone URL. Still, GotHub is helpful for some usages. For example, it works well for linking to individual files.
* Software packages. A useful file for software
projects is the README file; it contains a description of the package,
which is usually the first thing a user wants to see before attempting
to fetch the repository. We have applied this solution several times in
www.gnu.org; for example, we replaced this:
https://github.com/pbatard/rufus
with this:
https://gothub.projectsegfau.lt/pbatard/rufus
.
Another solution is to link directly to the tarball of a tagged commit on GitHub. The drawback of this method is that it is not very useful for tracking the project over time.
* Graphics, documents, manuals. These resources are
sometimes hosted in user pages that do not require JavaScript to be
fully usable, even when they are hosted inside an area of the GitHub
website. In these cases, it is okay to link to such pages. For example,
we replaced a link to
https://github.com/foocorp/gnu-fm/blob/main/clients/meego/librefm/src/librefm-logo.png
with a link to
https://raw.githubusercontent.com/foocorp/gnu-fm/main/clients/meego/librefm/src/librefm-logo.png
.
And we have links to documents such as
https://raw.githubusercontent.com/scootergrisen/licenser/master/gpl-3.0.da.txt
.
Sometimes a resource may be hosted in more than one acceptable place. It can be a personal page in GitHub or somewhere else, or in some unrelated website. When evaluating which one to choose, consider factors such as: What's the status of the document? Is it a final version or is it likely to be modified anytime soon? Is the URL reliably stable, or is it likely to be moved?
For example, in the past we had the case of a manual that was listed
in other-free-books.html with this URL:
.https://github.com/davidam/orgguide-es
At the time, we had three possibilitites to replace that bad link:
1. GotHub
https://gothub.projectsegfau.lt/raw/davidam/davidam.github.io/master/docu/orgguide.es.pdf
2. Author's personal space at GitHub
https://raw.githubusercontent.com/davidam/davidam.github.io/master/docu/orgguide.es.pdf
3. Publisher/Bookstore
https://traficantes.net/sites/default/files/pdfs/orgguide.es_.pdf
We decided for the third one, since it didn't seem that the manual was
likely to be updated to a new version, and Traficantes de SueƱos
is an established, well-known publisher.
Issue trackers on GitHub can be viewed and browsed without JavaScript,
but active participation entails an account that can't be created without
running nonfree JavaScript. It's okay to link to closed issues, like we
did for
https://github.com/w3c/fingerprinting-guidance/issues/8
.
Another possibility for closed issues is to link to the archived page at
the Wayback Machine.
Lastly, consider the possibility of talking to maintainers and authors to explain the problem. Hopefully they will move the repo somewhere else or post the material in a place we can link to.
CVS_RSH=ssh
.If you have write access to www, check out the main www repository with your Savannah login:
cvs -z3 -d:ext:username@cvs.savannah.gnu.org:/web/www co www
You will get a working directory, www
, with the same
structure as our main website.
If you don't have write access to www, you can still make an anonymous checkout of www:
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/web/www co www
Check out the web repository of the fooproject:
cvs -z3 -d:ext:username@cvs.savannah.gnu.org:/web/fooproject \ co fooproject
You will get a working directory, fooproject
, with the same
structure as the www/software/fooproject
subdirectory. Note,
however, that the fooproject and www repositories are independent. The
working directories can be anywhere in your filesystem.
Webmasters, please read Web pages for official GNU software before committing anything to the web repository of a software project.
Add a file or directory:
cvs add foo
Update before you edit a file:
cvs update -P foo
Check the changes you are going to commit:
cvs diff -U2 foo
Perform the commit (no need for cvs add
if the file is
already in the repository):
cvs commit foo
This will open a text editor where you should enter a log message. It will also show you a list of all files to be committed. The commit will occur upon exiting the editor.
Alternatively:
cvs commit -m "Log message" foo
This option is somewhat less safe, as it doesn't show you a list of the files to be committed. Moreover, a minor typo in the log message (omitting the space between the message and the filename) may result in committing all modified files in a directory, because the filename will not be treated as an argument, but as part of the message.
It's important to write good commit log messages to help project members and future generations find specific changes in a given file and understand why your changes were made.
Update link to XYZ.
Update a link.
Whenever possible, changes to multiple files that share the same log message should be bundled in one commit. Do not bundle multiple unrelated changes in one commit.
The changes (except to .symlinks files) should be visible on www.gnu.org within minutes.
For further details on CVS, such as reverting to a previous version, or
looking at the diff
output of a particular change, see the CVS documentation.
Since CVS is not able to handle symbolic links directly, a separate mechanism has been implemented to allow webmasters to maintain symbolic links, as follows. (Actual symbolic links are no longer created on www.gnu.org; mod_rewrite rules are used instead. But we'll keep this discussion talking about symlinks since it is easier to understand that way.)
Being a symlink means that relative links from the linked page may break when the symlink jumps to a different directory.
Special files, named .symlinks
, when committed
to the CVS tree, are interpreted as specifications to build
symbolic links.
Each symbolic link specification from the .symlinks file is honored,
i.e., the symbolic link is created if it does not exist yet. If a
symbolic link is found in the directory and is not listed in the
.symlinks file, it is removed.
The .symlinks files obey the ln -s
format, as described below:
Here is an example of a .symlinks file:
# Make a link named l.html to a target t.html. # Strictly equivalent to ln -s t.html l.html: t.html l.html
On each line the first file name must be a relative path name to an
existing file. The second file name may not contain any slash; it is the
name of the symbolic link to be created in the present directory. For
instance, if a page named dir.html
exists in the
/dir
directory, and index.html
does not exist,
/dir/.symlinks
should contain a line like this:
dir.html index.html
The ln -s
analogy accounts for only part of the story.
The current method actually takes advantage of the flexibility of URL
rewriting. Thus a single HTML entry in the .symlinks file defines links
to all possible translations that follow our naming
conventions. This makes it impossible to use
symlinks to redirect to and from HTML files whose names look like
translations, that is, page.ll.html
or
page.ll-cc.html
, where
ll and cc are two-letter
codes. When you need such redirections, use the htaccess mechanism.
These days, the .symlinks handling happens on www.gnu.org via a cron job that runs twice an hour. Webmasters do not have access to it.
To browsers, the symbolic links in the previous section are
indistinguishable from the actual file. You may want an actual
redirection in some cases. You can do this either in the top-level
control file .htaccess
, or by using something like this as the
file to be redirected:
<meta http-equiv="refresh" content="0;
url=https://www.gnu.org/target">
A description of scripts and software used on www.gnu.org is available. Please read it before writing any scripts, and also update it as needed if you have write access to www.
The system administrators for GNU change from time to time. Please email the sysadmin list <sysadmin@gnu.org> rather than an individual, unless you have a specific reason to do so.