Проект GNU и свободное программное обеспечение. Проект GNU и свободное программное обеспечение Считается что проект gnu стартовал в

GNU 3DLDF supports 3D drawing with output to the MetaPost format via a language similar to Metafont. It is primarily intended to provide a means of creating 3D content for TeX documents, but it can also create animations containing text typeset by TeX. (doc)

8sync

8sync (pronounced eight-sync) is an asynchronous programming library for GNU Guile. It makes use of delimited continuations to avoid a mess of callbacks, resulting in clean, easy-to-read, non-blocking code. (doc)

a2ps

GNU a2ps converts almost anything to a PostScript file, ready for printing. It accomplishes this by being able to delegate files to external handlers, such as Groff and Gzip. It handles as many steps as is necessary to produce a pretty-printed file. It also includes some extra abilities for special cases, such as pretty-printing --help output. (doc)

Acct

GNU acct provides a means for system administrators to determine system usage patterns. It provides information on, for example, connections, programs executed, and system resources used. (doc)

Acm

GNU ACM is a flight simulator in which players can compete in aerial combat from different computers, piloting well-equipped jet aircraft similar to an F-16C Falcon or a MiG-29 Fulcrum. (doc)

Adns

GNU adns is a C library that provides easy-to-use DNS resolution functionality. The library is asynchronous, allowing several concurrent calls. The package also includes several command-line utilities for use in scripts. (doc)

Alive

GNU Alive sends periodic pings to a server, generally to keep a connection alive. (doc)

Anubis

Anubis is a daemon that sits between the Mail User Agent (MUA) and the Mail Transfer Agent (MTA). When a mail is sent by a user in the MUA, it is first passed to Anubis, which performs additional processing to the message before passing it on for delivery by the MTA. Anubis may, for example, modify the message headers or body, or encrypt or sign the message. (doc)

APL

GNU APL is a free interpreter for the programming language APL. It is an implementation of the ISO standard 13751. (doc)

Archimedes

Archimedes is a free package for semiconductor device simulations. It is intended to assist engineers in designing and simulating submicron and mesoscopic semiconductor devices based on the Ensemble Monte Carlo method. It is able to handle a wide variety of materials and structures, which are described through simple scripts. (doc)

Aris

Aris is a program for performing logical proofs. It supports propositional and predicate logic, as well as Boolean algebra and arithmetical logic. In addition to its predefined inference and equivalence rules, Aris also supports references to older proofs. Its use of standard logical symbols and its natural deduction interface make it easy to use for beginners. (doc)

Artanis

GNU Artanis is a web application framework written in Guile Scheme. A web application framework (WAF) is a software framework that is designed to support the development of dynamic websites, web applications, web services and web resources. The framework aims to alleviate the overhead associated with common activities performed in web development. Artanis provides several tools for web development: database access, templating frameworks, session management, URL-remapping for RESTful, page caching, and more. (doc)

Aspell

Aspell is a spell-checker which can be used either as a library or as a standalone program. Notable features of Aspell include its full support of documents written in the UTF-8 encoding and its ability to use multiple dictionaries, including personal ones. (doc)

AUCTeX

AUCTeX is an integrated environment for producing TeX documents in Emacs. It allows many different standard TeX macros to be inserted with simple keystrokes or menu selection. It offers an interface to external programs, enabling you to compile or view your documents from within Emacs. AUCTeX also features the ability to place inline previews of complex TeX statements such as mathematical formulae. (doc)

Autoconf

Autoconf offers the developer a robust set of M4 macros which expand into shell code to test the features of Unix-like systems and to adapt automatically their software package to these systems. The resulting shell scripts are self-contained and portable, freeing the user from needing to know anything about Autoconf or M4. (doc)

Autoconf-archive

Autoconf Archive is a collection of over 450 new macros for Autoconf, greatly expanding the domain of its functionality. These macros have been contributed as free software by the community. (doc)

Autogen

AutoGen is a program to ease the maintenance of programs that contain large amounts of repetitive text. It automates the construction of these sections of the code, simplifying the task of keeping the text in sync. It also includes an add-on package called AutoOpts, which is specialized for the maintenance and documentation of program options. (doc)

Automake

Automake the part of the GNU build system for producing standards-compliant Makefiles. Build requirements are entered in an intuitive format and then Automake works with Autoconf to produce a robust Makefile, simplifying the entire process for the developer. (doc)

Avl

libavl provides a large collection of binary search tree and balanced tree routines for C. These trees offer at least O(log n) performance for usually costly operations such as searching, inserting or deleting items from a data structure. (doc)

Ball and Paddle

Ball and Paddle is a classic arcade game in which you use a paddle at the bottom of the screen to bounce a ball against bricks in the upper region, eliminating the bricks as they are hit. As a novel twist, events and attributes of all the objects (bricks, ball, etc.) may be scripted with GNU Guile. (doc)

Barcode

GNU Barcode is a flexible tool to produce printed barcodes from text strings. It supports a variety of encoding standards and sizing measurements. Barcodes can be output in PostScript or Encapsulated PostScript formats. (doc)

Bash

Bash is the shell, or command-line interpreter, of the GNU system. It is compatible with the Bourne Shell, but it also integrates useful features from the Korn Shell and the C Shell and new improvements of its own. It allows command-line editing, unlimited command history, shell functions and aliases, and job control while still allowing most sh scripts to be run without modification. (doc)

Bayonne

Bayonne is the telephony server of the GNU Telephony project. It offers a scalable environment for the development and deployment of telephony solutions, with a focus on SIP. (doc)

Bazaar

GNU Bazaar is a version control system that allows you to record changes to project files over time. It supports both a distributed workflow as well as the classic centralized workflow. (doc)

bc is an arbitrary precision numeric processing language. It includes an interactive environment for evaluating mathematical statements. Its syntax is similar to that of C, so basic usage is familiar. It also includes dc , a reverse-polish calculator. (doc)

BFD

Binutils

GNU Binutils is a collection of tools for working with binary files. Perhaps the most notable are ld , a linker, and as , an assembler. Other tools include programs to display binary profiling information, list the strings in a binary file, and utilities for working with archives. The bfd library for working with executable and object formats is also included. (doc)

Bison

GNU Bison is a general-purpose parser generator. It can build a deterministic or generalized LR parser from an annotated, context-free grammar. It is versatile enough to have many applications, from parsers for simple tools through complex programming languages. (doc)

Bool

GNU Bool is a utility to perform text searches on files using Boolean expressions. For example, a search for hello AND world would return a file containing the phrase Hello, world! . It supports both AND and OR statements, as well as the NEAR statement to search for the occurrence of words in close proximity to each other. It handles context gracefully, accounting for new lines and paragraph changes. It also has robust support for parsing HTML files. (doc)

BPEL2oWFN

GNU BPEL2oWFN translates a web service expressed in Web Service Business Process Execution Language (WS-BPEL) into an open Workflow Net (oWFN). It may additionally convert a BPEL4Chor choreography to a Petri Net model. Properties of Petri Nets may be analyzed efficiently, due to the use of static analysis to make the models compact. Control and data flow analysis, as well as basic checks for deadlocks and other such properties are available. (doc)

C-graph

GNU C-Graph is a tool for demonstrating the theory of convolution. Thus, it can serve as an excellent aid to students of signal and systems theory in visualizing the convolution process. Rather than forcing the student to write code, the program offers an intuitive interface with interactive dialogs to guide them. (doc)

ccAudio

GNU ccAudio2 is a portable C++ class for working with audio data from disk. The classes are both endian and content aware; rather than treating audio as binary data, this library treats it as an sequence of samples. It can also handle metadata information. ccAudio2 supports sun audio, raw samples, and RIFF encoded audio data. (doc)

Ccd2cue

GNU ccd2cue is a preprocessor for CD burning software that allows the conversion of the proprietary CCD format to the CUE format, which is well-supported by free software. These files are commonly distributed with CD images and are used to describe how tracks are laid out on the image. (doc)

Ccide

GNU Ccide is a decision table code generator for the C language. This helps to avoid unmanageable and error-prone chains of nested if-else statements. Instead, decision tables are entered in an intuitive and easy-to-read format, which is then expanded into portable C code. (doc)

ccRTP

GNU ccRTP is an implementation of RTP, the real-time transport protocol from the IETF. It is suitable both for high capacity servers and personal client applications. It is flexible in its design, allowing it to function as a framework for the framework, rather than just being a packet-manipulation library. (doc)

ccScript

GNU ccScript3 is a library to add a virtual machine execution system for use with/as a scripting or assembler language for real-time, state-transition driven systems. (doc)

Cflow

GNU cflow analyzes C source files and produces a graph charting the control flow of the program. It can output the graph in several styles and in either the POSIX format or in an extended GNU format. cflow also includes a major mode for Emacs for examining the flowcharts that it produces. (doc)

Cgicc

GNU cgicc is an ANSI-compliant C++ library for writing CGI applications, featuring support for FastCGI. The library supports several features, including handling both GET and POST data, handling a variety of form data types, and on-the-fly HTML generation. (doc)

Chess

GNU Chess is a chess engine. It allows you to compete against the computer in a game of chess, either through the default terminal interface or via an external visual interface such as GNU XBoard. (doc)

Cim

Cim is the GNU compiler for Simula, the first object-oriented programming language. (doc)

Classpath

GNU Classpath provides essential libraries for Java virtual machines and compilers. It is compatible with a large percentage of the language API specifications and provides a wide array of functionality. (doc)

CLISP

GNU CLISP is an implementation of ANSI Common Lisp. Common Lisp is a high-level, object-oriented functional programming language. CLISP includes an interpreter, a compiler, a debugger, and much more. (doc)

Combine

GNU combine works to merge files based on a common key in a hash table. It can be seen as similar to, albeit much more powerful than, the standard join utility. Unlike join , any number of files may be merged based on the matches found. combine also has other advanced features, such as date parsing and directory traversal. (doc)

[u]Common C++

GNU Common C++ is an portable, optimized class framework for threaded applications, supporting concurrent synchronization, inter-process communications via sockets, and various methods for data handling, such as serialization and XML parsing. It includes the uCommon C++ library, a smaller reimplementation. (doc)

Complexity

GNU complexity provides tools for finding procedures that are convoluted, overly long or otherwise difficult to understand. This may help in learning or reviewing unfamiliar code or perhaps highlighting your own code that seemed comprehensible when you wrote it. (doc)

Config

The config.guess script tries to guess a canonical system triple, and config.sub validates and canonicalizes. These are used as part of configuration in nearly all GNU packages (and many others). (doc)

Coreutils

GNU Coreutils includes all of the basic command-line tools that are expected in a POSIX system. These provide the basic file, shell and text manipulation functions of the GNU system. Most of these tools offer extended functionality beyond that which is outlined in the POSIX standard. (doc)

Cpio

GNU cpio copies files into or out of cpio or tar archives. Indeed, many formats are supported, including legacy formats. The format is determined automatically by the program and is handled appropriately. Furthermore, the location of the archive is not important. It can be another file on the drive, a tape, or data on a pipe. (doc)

Cppi

GNU Cppi processes C source code files to properly indent the preprocessor directives to reflect their nesting. It also performs other standardizations, such as correcting the number of spaces between directives and the text following them. (doc)

CSSC

GNU CSSC provides a replacement for the legacy Unix source code control system SCCS. This allows old code still under that system to be accessed and migrated on modern systems. (doc)

Cursynth

GNU cursynth is a polyphonic synthesizer that runs graphically in the terminal. It is built on a full-featured subtractive synthesis engine. Notes and parameter changes may be entered via MIDI or the computer"s keyboard. (doc)

Dap

GNU Dap is a statistics and graphics package. It can read programs written for the proprietary statistics system SAS. Its syntax is similar to, but simpler than C, making performing most tasks relatively easy while still providing advanced graphical capabilities. (doc)

Datamash

Perform basic numeric, textual and statistical operations on plain text files. Designed to work within standard pipelines without additional code. (doc)

DDD

GNU DDD, the Data Display Debugger, is a graphical front-end for command-line debuggers. Many back-end debuggers are supported, notably the GNU debugger, GDB. In addition to usual debugging features such as viewing the source files, DDD has additional graphical, interactive features to aid in debugging. (doc)

ddrescue

GNU ddrescue is a fully automated data recovery tool. It copies data from one file to another, working to rescue data in case of read errors. The program also includes a tool for manipulating its log files, which are used to recover data more efficiently by only reading the necessary blocks. (doc)

DejaGnu

DejaGnu is a framework for testing software. In effect, it serves as a front-end for all tests written for a program. Thus, each program can have multiple test suites, which are then all managed by a single harness. (doc)

Denemo

GNU Denemo is a music notation editor that provides a convenient interface to the powerful music engraving program Lilypond. Music can be typed in using the computer keyboard, played in using a MIDI keyboard, or even input via a microphone connected to the sound card. The final product is publication-quality music notation that is continuously generated in the background while you work. (doc)

Dia

Dico

GNU Dico implements a flexible dictionary server and client according to RFC 2229 (DICT Server). It is able to access any database available, regardless of format, thanks to its modular structure. New modules may be written in C, Guile or Python. Dico also includes a command-line client, which may be used to query remote dictionary databases. (doc)

Diction

A package providing two classic Unix commands, style and diction. Diction is used to identify wordy and commonly misused phrases in a body of text. Style instead analyzes surface aspects of a written work, such as sentence length and other readability measures. (doc)

Diffutils

GNU Diffutils is a package containing tools for finding the differences between files. The diff command is used to show how two files differ, while cmp shows the offsets and line numbers where they differ. diff3 allows you to compare three files. Finally, sdiff offers an interactive means to merge two files. (doc)

Dionysus

GNU Dionysus is a convenient system for quickly retrieving the values of mathematical constants used in science and engineering. Values can be searched using a simple command-line tool, choosing from three databases: universal constants, atomic numbers, and constants related to semiconductors. (doc)

Direvent

A daemon that monitors directories for events, such as creating, deleting or modifying files. It can monitor different sets of directories for different events. When an event is detected, direvent calls a specified external program with information about the event, such as the location within the file system where it occurred. Thus, direvent provides an easy way to react immediately if given files undergo changes, for example, to track changes in important system configuration files. (doc)

Dominion

GNU Dominion is a multi-player world simulation game. In it, each player rules a nation and must maintain their nation in the face of competition from the other players. Players must make political, economical, military and diplomatic decisions in order for their nations to survive. This game is intended to be played by players all with access to the same computer system. (doc)

Easejs

ease.js is a classical object-oriented framework for JavaScript, intended to eliminate boilerplate code and ease the transition to JavaScript from other object-oriented languages. (doc)

Ed is a line-oriented text editor: rather than offering an overview of a document, ed performs editing one line at a time. It can be executed both interactively and via shell scripts. Its method of command input allows complex tasks to be performed in an automated way. GNU ed offers several extensions over the standard utility. (doc)

EDMA

GNU EDMA is a development environment that combines ideas from both object-oriented programming and component-based systems. It is used to build modular, evolving applications as well as reusable components. EDMA provides a convenient means to build object-oriented programs in C without requiring C++. Also, it has a unique component system, unlike other free software component-based systems which imitate the design of proprietary counterparts. It includes a graphical wizard, gidfwizard, a tool for building GNU EDMA Interface definition files and to create skeleton files necessary to build EDMA classes, and a graphical class browser, gecb. (doc)

Electric

GNU Electric is a CAD program for designing electrical circuits, handling custom IC layout, schematic drawing and hardware description language specifications. Several CAD operations are supported, such as rule checking and simulation. Many different types of designs can be produced and input or output in a wide variety of formats. (doc)

Emacs

GNU Emacs is an extensible and highly customizable text editor. It is based on an Emacs Lisp interpreter with extensions for text editing. Emacs has been extended in essentially all areas of computing, giving rise to a vast array of packages supporting, e.g., email, IRC and XMPP messaging, spreadsheets, remote server editing, and much more. Emacs includes extensive documentation on all aspects of the system, from basic editing to writing large Lisp programs. It has full Unicode support for nearly all human languages. (doc)

Emacs-muse

Muse is an authoring and publishing environment for GNU Emacs. It supports entering text in a convenient and easy-to-learn format. Later, your documents may be published in a variety of different formats, such as HTML, LaTeX or PDF. Muse supports projects consisting of several documents, which are properly merged according to the output format. (doc)

EMMS

EMMS is the Emacs Multimedia System. It is a small front-end which can control one of the supported external players. Thus, it supports whatever formats are supported by your music player. It also supports tagging and playlist management, all behind a clean and light user interface. (doc)

Enscript

GNU Enscript is a program to convert ASCII text files to PostScript, HTML or RTF formats, to be stored in files or sent immediately to a printer. It also includes the capability to perform syntax highlighting for several different programming languages. (doc)

Fdisk

GNU fdisk provides a GNU version of the common disk partitioning tool fdisk. fdisk is used for the creation and manipulation of disk partition tables, and it understands a variety of different formats. (doc)

Ferret

GNU Ferret is a graphical data modeler for the Entity/Relationship paradigm. It can automatically create relational schemas from the data models and it can be used to generate SQL statements in a variety of dialects. (doc)

Findutils

Findutils supplies the basic file directory searching utilities of the GNU system. It consists of two primary searching utilities: find recursively searches for files in a directory according to given criteria and locate lists files in a database that match a query. Two auxiliary tools are included: updatedb updates the file name database and xargs may be used to apply commands with arbitrarily long arguments. (doc)

FisicaLab

GNU FisicaLab is an educational application for solving physics problems. Its main objective is allow the user to focus on physics concepts, leaving aside the mathematical details. (doc)

Foliot

GNU Foliot is an application for keeping track of time spent working on projects. (doc)

Fontopia

Fontopia is an easy-to-use, text-based, console font editor. It"s used to edit the fonts that GNU/Linux uses to display text on text-based terminals. Fontopia works on both PSF 1 & 2, BDF, Code Paged (CP) fonts, and Raw font files. It provides a user-friendly, easy-to-use glyph editor and it can easily change font metrics (e.g. length, width, and height) and convert between different font formats. (doc)

Fontutils

GNU Fontutils is a collection of programs for handling fonts. Bitmaps can be extracted from scanned images of characters, edited, and converted into outline fonts. In general, Fontutils supports the font formats supported by the TeX typesetting environment, including PostScript Type 1 fonts. (doc)

FreeDink

GNU FreeDink is a free and portable re-implementation of the engine for the role-playing game Dink Smallwood. It supports not only the original game data files but it also supports user-produced game mods or D-Mods . To that extent, it also includes a front-end for managing all of your D-Mods. (doc)

Free UCS Outline Fonts

GNU FreeFont is a collection of scalable outline fonts that are suitable for general computer use and for desktop publishing. A serif, a sans serif and a monospace font are included, all available in both TrueType and OpenType formats. The fonts support a broad range of characters for many different writing systems, and have excellent coverage of mathematical notation. (doc)

FreeIPMI

GNU FreeIPMI is a collection of in-band and out-of-band IPMI software in accordance with the IPMI v1.5/2.0 specification. These programs provide a set of interfaces for platform management. Common functionality includes sensor monitoring, system event monitoring, power control and serial-over-LAN. (doc)

Freetalk

GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses the Readline library to handle input, so it features convenient navigation of text as well as tab-completion of buddy names, commands and English words. It is also scriptable and extensible via Guile. This package is looking for a maintainer. (doc)

FriBiDi

GNU FriBidi is an implementation of the Unicode Bidirectional Algorithm. This algorithm is used to properly display text in left-to-right or right-to-left ordering as necessary. (doc)

G-Golf

G-Golf (Gnome: (Guile Object Library for)) is a library for developing modern applications in Guile Scheme. It comprises a direct binding to the GObject Introspection API and higher-level functionality for importing Gnome libraries and making GObject classes (and methods) available in Guile"s object-oriented programming system, GOOPS. (doc)

Gama

GNU Gama is a program for the adjustment of geodetic networks. It is useful in measurements where Global Positioning System (GPS) is not available, such as underground. It features the ability to adjust in local Cartesian coordinates as well as partial support for adjustments in global coordinate systems. (doc)

Gratuitous ARP Daemon

GNU garpd broadcasts Gratuitous ARP (Address Resolution Protocol) requests/replies for a list of MAC address <-> IP address mappings on specified interfaces at regular intervals. Gratuitous ARP request packets are those where the source and the destination IPs are both the IP of the requesting machine. Gratuitous ARP replies are those made without a corresponding request. (doc)

Gawk

Gawk is the GNU implementation of Awk, a specialized programming language for the easy manipulation of formatted text, such as tables of data. Gawk features many extensions beyond the traditional implementation, including network access, sorting, and large libraries. (doc)

Gbehistun

GNU Behistun consists of software and utilities for geological and geophysical modeling and mapping of internal structures and dynamics. Like the Behistun Multilingual Inscription, the Behistun software utilities provide knowledge and functionality to work on planetary systems and investigate their interior in freedom. (doc)

Gcal

Gcal is a program to calculate and print calendars on the command-line. Calendars can be printed in 1-month, 3-month or whole-year views. In addition, eternal holiday lists can be generated for many countries, which can be complemented by user-made lists of fixed dates to make an agenda. Gcal can also calculate astronomical data, such as the phases of the moon, and supports alternative calendar formats: Julian, Gregorian, Islamic, Chinese and more. (doc)

GCC

GCC is the GNU Compiler Collection. It provides compiler front-ends for several languages, including C, C++, Objective-C, Fortran, Java, Ada, and Go. It also includes runtime support libraries for these languages. (doc)

Gcide

GCIDE is a free dictionary based on a combination of sources. It can be used via the GNU Dico program or accessed online at http://gcide.сайт.ua/ (doc)

GNU Common Lisp

GCL is an implementation of the Common Lisp language. It features the ability to compile to native object code and to load native object code modules directly into its lisp core. It also features a stratified garbage collection strategy, a source-level debugger and a built-in interface to the Tk widget system. (doc)

GCompris

GCompris is a suite of educational software for children. It features a variety of activities suitable for kids aged 2 to 10 years old. The suite includes activities to introduce and develop skills in computer use, algebra, science, reading and more. It also features some games such as chess and sudoku. (doc)

GDB

GDB is the GNU debugger. With it, you can monitor what a program is doing while it runs or what it was doing just before a crash. It allows you to specify the runtime conditions, to define breakpoints, and to change how the program is running to try to fix bugs. It can be used to debug programs written in C, C++, Ada, Objective-C, Pascal and more. (doc)

Gdbm

GDBM is a library for manipulating hashed databases. It is used to store key/value pairs in a file in a manner similar to the Unix dbm library and provides interfaces to the traditional file format. (doc)

Gengen

GNU Gengen is a program to generate text-generators, i.e., functions producing text with variable sections. The text is first specified by the user in a template file containing parameters, then processed by gengen to create the text-generator. At runtime, the variable text is defined by the rest of the program and passed to the text-generator, which then substitutes it into the template parameters and returns the result. Gengen can be used to generate C and C++ code. (doc)

Gengetopt

GNU Gengetopt is a program to generate a C/C++ function for parsing command-line options using the getopt_long function found in GNU libc, removing some of the tedium of this task for large programs that accept many options. The options parsed by the generated function may be in both short (e.g., -h) and long (--help) formats, as specified by the GNU coding standards. Additionally, the output of the standard options --help and --version is generated automatically. (doc)

Gettext

GNU Gettext is a package providing a framework for translating the textual output of programs into multiple languages. It provides translators with the means to create message catalogs, as well as an Emacs mode to work with them, and a runtime library to load translated messages from the catalogs. Nearly all GNU packages use Gettext. (doc)

Gforth

Gforth is a fast and portable implementation of the ANSI Forth language. It includes an editing mode for Emacs and an interpreter featuring completion and history. A generic virtual machine environment, vmgen, is also included. (doc)

Ggradebook

GNU Gradebook is an application for teachers for tracking student grades. It supports several grading styles, including American (A, B, C, D, F) and European numeric scales. (doc)

GNU Ghostscript

Ghostscript is an interpreter for the PostScript language and the PDF file format. It also includes a C library that implements the graphics capabilities of the PostScript language. It supports a wide variety of output file formats and printers. (doc)

GIFT

The GNU Image-Finding Tool (GIFT) is a Content Based Image Retrieval System. It uses the content of images to perform queries on a collection, enabling you to query by example. Also, a tool to index whole directory trees is included. (doc)

GIMP

GIMP is an application for image manipulation tasks such as photo retouching, composition and authoring. It supports all common image formats as well as specialized ones. It features a highly customizable interface that is extensible via a plugin system. (doc)

Glean

GNU glean is a modular system for self-study, considerably more intricate than standard flash cards method. It is very customizable, allowing the user to define subjects of interest and activities to study them. For now, it has a text-based interface inside the Guile REPL and an experimental web interface. (doc)

Gleem

GNU gleem is a library for Java and C++ offering a set of 3D widgets that support direct user interaction with a 3D scene. These widgets are used to translate along a line, translate in a plane, and do three-dimensional translation and rotation. This package is looking for a maintainer. (doc)

GLib

Global

GNU GLOBAL is a source code tagging system that functions in the same way across a wide array of environments, such as different text editors, shells and web browsers. The resulting tags are useful for quickly moving around in a large, deeply nested project. (doc)

GLPK

GLPK is a C library for solving large-scale linear programming (LP), mixed integer programming (MIP), and other related problems. It supports the GNU MathProg modeling language, a subset of the AMPL language, and features a translator for the language. In addition to the C library, a stand-alone LP/MIP solver is included in the package. (doc)

Gmediaserver

GMediaServer is a UPnP-compatible media server. It serves audio and video files to network-connected media players via a command-line program that runs in the background. (doc)

GMP

GMP is a library for arbitrary precision arithmetic, operating on signed integers, rational numbers and floating point numbers. The precision is only limited by the available memory. The library is highly optimized, with a design focus on execution speed. It is aimed at use in, for example, cryptography and computational algebra. (doc)

Gnash

Gnash is a free Flash movie player. It supports SWF version v7 and some of v8 and v9. It is possible to configure Gnash to use several different audio or video backends, ensuring good performance. (doc)

GNAT

GNATS

GNATS is a set of tools for tracking bugs and other user-reported software issues. It is completely open-ended in how its database may be queried, edited and maintained, featuring interfaces ranging from the command-line to Emacs, though the main means of interaction is via its web interface. It is also flexible enough to support user-made utilities. (doc)

Gnatsweb

Gneural Network

Gneural Network implements a programmable neural network. It currently supports feed-forward networks which can learn simple tasks such as curve-fitting. (doc)

GNOME

GNOME is the graphical desktop for GNU. It includes a wide variety of applications for browsing the web, editing text and images, creating documents and diagrams, playing media, scanning, and much more. (doc)

GNU C reference manual

This is a reference manual for the C programming language, as implemented by the GNU C Compiler (gcc). As a reference, it is not intended to be a tutorial of the language. Rather, it outlines all of the constructs of the language. Library functions are not included. (doc)

GNU-pw-mgr

This program is designed to make it easy to reconstruct difficult passwords when they are needed while limiting the risk of attack. The user of this program inputs a self-defined transformation of a web site URL and obtains the password and user name hint for that web site. (doc)

GNUbatch

GNUbatch is an advanced batch scheduling system. It executes computational jobs at specified dates and times or according to interdependencies. The jobs may be completed on any number of processors shared across a network. Full access-control of the jobs is supported. (doc)

Backgammon

The GNU backgammon application can be used for playing, analyzing and teaching the game. It has an advanced evaluation engine based on artificial neural networks suitable for both beginners and advanced players. In addition to a command-line interface, it also features an attractive, 3D representation of the playing board. (doc)

GNUbiff

GNUbiff is a program that checks for mail and notifies you when new messages arrive. It supports multiple mailboxes which may be accessed via a variety of methods such as POP3, IMAP, MH and mailfiles. Graphical notifications are provided with GTK and complete integration with GNOME is supported. (doc)

GNUbik

GNUbik is a puzzle game in which you must manipulate a cube to make each of its faces have a uniform color. The game is customizable, allowing you to set the size of the cube (the default is 3x3) or to change the colors. You may even apply photos to the faces instead of colors. The game is scriptable with Guile. (doc)

GNUcap

GNUcap is a circuit analysis package. It offers a general purpose circuit simulator and can perform DC and transient analyses, fourier analysis and AC analysis. The engine is designed to do true mixed-mode simulation. (doc)

GnuCash

GnuCash is personal and professional financial-accounting software. It can be used to track bank accounts, stocks, income and expenses, based on the double-entry accounting practice. It includes support for QIF/OFX/HBCI import and transaction matching. It also automates several tasks, such as financial calculations or scheduled transactions. (doc)

GnuComm

Telecom subsystem of the GNU Project: umbrella project for GNU Telephony software, currently Bayonne, SIP Witch, and their supporting libraries (Common C++ / uCommon, ccAudio, ccScript, ccRTP and ZRTP / ZRTP4J). (doc)

GnuDOS

GnuDOS is a set of programs designed to help new users of the GNU system in growing accustomed to the system, particularly users who might be coming from a DOS background. It consists of a file manager, a text editor and a form designer for the console as well as a core library for building similar utilities. (doc)

GNU Enterprise

GNU Enterprise supports enterprise planning. It includes an application server, common development library, an IDE for designing data forms, forms interface, navigator and menu system, and data reporting system. (doc)

GNUgo

GNU Go is a program that plays the game of Go, in which players place stones on a grid to form territory or capture other stones. While it can be played directly from the terminal, rendered in ASCII characters, it is also possible to play GNU Go with 3rd party graphical interfaces or even in Emacs. It supports the standard game storage format (SGF, Smart Game Format) and inter-process communication format (GMP, Go Modem Protocol). (doc)

GNU Interactive Tools

The GNU Interactive Tools are a set of lightweight, interactive command-line tools. They include an extensible, orthodox (two-pane) file manager, an ASCII/hex file viewer, and a process viewer/killer. The package also includes some related utilities and scripts, such as a tool to decompress any type of archive file. All the tools can be enhanced and extended through their configuration files to perform new commands. (doc)

GNUjump

GNUjump is a simple, yet addictive game in which you must jump from platform to platform to avoid falling, while the platforms drop at faster rates the higher you go. The game features multiplayer, unlimited FPS, smooth floor falling, themeable graphics and sounds, and replays. (doc)

GNUlib

Gnulib is a central location for common infrastructure needed by GNU packages. It provides a wide variety of functionality, e.g., portability across many systems, working with Unicode strings, cryptographic computation, and much more. The code is intended to be shared at the level of source files, rather than being a standalone library that is distributed, built, and installed. The included gnulib-tool script helps with using Gnulib code in other packages. Gnulib also includes copies of licensing and maintenance-related files, for convenience. (doc)

Mach

GNUmed

GNUmed is Electronic Medical Record software, supporting paperless medical practices. Several interface languages are supported. (doc)

GNUmeric

GNUmeric is a GNU spreadsheet application, running under GNOME. It is interoperable with other spreadsheet applications. It has a vast array of features beyond typical spreadsheet functionality, such as support for linear and non-linear solvers, statistical analysis, and telecommunication engineering. (doc)

GNUmp3d

GNUMP3d is a streaming server for MP3 and Ogg Vorbis audio files, movies, and other media formats. It is small and self-contained, presenting a simple, themeable HTML interface. The audio files can then be played in any player that supports streaming over HTTP. (doc)

GNUnited Nations

GNUnited Nations is a build system for translating the web site at www.сайт. It works via template files, which allow changes to be merged into individual translations of a page, from which the final HTML is generated. In effect, this helps to keep all translations of a page up-to-date. (doc)

GNUnet

GNUnet is a framework for secure peer-to-peer networking. The high-level goal is to provide a strong foundation of free software for a global, distributed network that provides security and privacy. GNUnet in that sense aims to replace the current internet protocol stack. Along with an application for secure publication of files, it has grown to include all kinds of basic applications for the foundation of a GNU internet. (doc)

GnuPG

The GNU Privacy Guard is a complete implementation of the OpenPGP standard. It is used to encrypt and sign data and communication. It features powerful key management and the ability to access public key servers. It includes several libraries: libassuan (IPC between GnuPG components), libgpg-error (centralized GnuPG error values), and libskba (working with X.509 certificates and CMS data). (doc)

GNUpod

GNUpod is a collection of scripts for using iPods with GNU/Linux and other operating systems. It can be used for transferring music and cover art, searching files, removing files, editing tags, creating playlists and more. (doc)

GNUprologjava

GNU Prolog for Java is an implementation of the ISO Prolog standard as a Java library (gnu.prolog). Thus, with it you can use Prolog from within Java programs. (doc)

Radio

GNU Radio is a toolkit for implementing software radios. Its signal processing blocks can be combined with low-cost external RF hardware to create software-defined radios. Without hardware, it can be used for simulation. Radio applications are primarily written in Python, with C++ support for performance-critical processing tasks. (doc)

Robots

GNU Robots is a game in which you program a robot to explore a world full of enemies that can hurt it, obstacles and food to be eaten. The goal of the game is to stay alive and collect prizes. The robot program conveniently may be written in a plain text file in the Scheme programming language. (doc)

GNUschool

GNUschool is a web application for students, teachers and school administrators. With it, teachers can create tests for the students to take online, give feedback and assign grades. School administrators can use it to monitor student attendance and edit student information. (doc)

GNUshogi

GNU Shogi is a program that plays the game Shogi (Japanese Chess). It also includes a graphical interface to the game. While similar to standard chess, this variant is far more complicated. (doc)

GNUsound

GNUsound is a multitrack sound editor for GNOME 1 and 2. It can read and write many audio file formats such as WAV, MP3 and FLAC. It can work with the OSS, ALSA or JACK audio backends. It provides many different built-in audio processing modules, such as fades in/out, delay, and filters. GLADSPA plugins may also be used for further processing. (doc)

GNUspool

GNUspool is an advanced print spooling system. In addition to the functionality of the standard printing system, it provides post-processing capabilities, form type handling, alignment pages and other features. It functions transparently on a network, sharing jobs on any host with printers on any other host. Several user different interfaces are available. (doc)

GNUstep

GNUstep is a fully-functional object-oriented development environment; a number of user applications are also included. It closely follows the Cocoa APIs but is platform-independent. (doc)

GnuTLS

GnuTLS is a secure communications library implementing the SSL, TLS and DTLS protocols. It is provided in the form of a C library to support the protocols, as well as to parse and write X.5009, PKCS 12, OpenPGP and other required structures. (doc)

GNUtrition

GNUtrition is a free nutrition analysis software. With it, one can keep track of the nutritional information of food. The software uses the Nutrient Database of Standard Reference of the US Department of Agriculture as a source of food nutrient information. (doc)

GNUzilla

Goptical

Goptical is a library for optical design and simulation in C++. It provides model classes for optical components, surfaces and materials. With it, one can simulate building an optical system by creating and placing optical components in a 3d space, and visualize light propagating through the system. (doc)

Gorm

Gpaint

GNU Paint is a simple, easy-to-use paint program for the GNOME environment. It supports drawing freehand as well as basic shapes and text. It features cut-and-paste for irregular regions or polygons. (doc)

Gperf

gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table in C or C++ code. That the hash function is perfect means that no collisions can exist and that look-ups can be made by single string comparisons. (doc)

Gprolog

GNU Prolog is a standards-compliant Prolog compiler with constraint solving over finite domains. It accepts Prolog+ constraint programs and produces a compiled, native binary which can function in a stand-alone manner. It also features an interactive interpreter. (doc)

phpGrabComics

phpGrabComics is a program that fetches and saves comic strips from the web. It features both a server, which can download strips from different sources, and ports, tiny applications which get the list of available comics from the server. (doc)

Greg

GNU Greg is a framework for testing programs and libraries. It provides a single front-end for all tests of a package as well as a simple framework for writing the tests. It is loaded as a Guile module into any software with an embedded Guile interpreter. It also provides a compiled module that may be dynamically linked into Guile to permit testing external programs. (doc)

Grep

grep is a tool for finding text inside files. Text is found by matching a pattern provided by the user in one or many files. The pattern may be provided as a basic or extended regular expression, or as fixed strings. By default, the matching text is simply printed to the screen, however the output can be greatly customized to include, for example, line numbers. GNU grep offers many extensions over the standard utility, including, for example, recursive directory searching. (doc)

Gretl

GNU Gretl is a package for performing statistical computations for econometrics. It consists of both a command-line client and a graphical client. It features a variety of estimators such as least-squares and maximum likelihood; several time series methods such as ARIMA and GARCH; limited dependent variables such as logit, probit and tobit; and a powerful scripting language. It can output models as LaTeX files. It also may be linked to GNU R and GNU Octave for further data analysis. (doc)

Groff

Groff is a typesetting package that reads plain text and produces formatted output based on formatting commands contained within the text. It is usually the formatter of man documentation pages. (doc)

GRUB

GRUB is a multiboot bootloader. It is used for initially loading the kernel of an operating system and then transferring control to it. The kernel then goes on to load the rest of the operating system. As a multiboot bootloader, GRUB handles the presence of multiple operating systems installed on the same computer; upon booting the computer, the user is presented with a menu to select one of the installed operating systems. (doc)

Gsasl

GNU SASL is an implementation of the Simple Authentication and Security Layer framework. On network servers such as IMAP or SMTP servers, SASL is used to handle client/server authentication. This package contains both a library and a command-line tool to access the library. (doc)

Gsegrafix

GSEGrafix is an application which produces high-quality graphical plots for science and engineering. Plots are specified via simple ASCII parameter files and data files and are presented in an anti-aliased GNOME canvas. The program supports rectangular two-dimensional plots, histograms, polar-axis plots and three-dimensional plots. Plots can be printed or saved to BMP, JPEG or PNG image formats. (doc)

GNU Scientific Library

The GNU Scientific Library is a library for numerical analysis in C and C++. It includes a wide range of mathematical routines, with over 1000 functions in total. Subject areas covered by the library include: differential equations, linear algebra, Fast Fourier Transforms and random numbers. (doc)

GNU Slip

GNU Slip is a functional extension of the capabilities provided in the C++ Standard Template Library (STL) list and queue containers, though SLIP is not a replacement for the STL containers. SLIP data cells can be used in application-specific computations, among other enhancements. (doc)

GSRC supports installing the latest releases of GNU packages on an existing system. New versions are installed in a separate place so as not to interfere with the system versions. The goal is to make it easier to work with the original, upstream, GNU sources, and perhaps help with development and testing. (doc)

Generic Security Service

The GNU Generic Security Service provides a free implementation of the GSS-API specification. It provides a generic application programming interface for programs to access security services. Security services present a generic, GSS interface, with which the calling application interacts via this library, freeing the application developer from needing to know about the underlying security implementation. (doc)

GTick

GTick is a metronome application. It supports different meters, such as 2/4, 3/4, 4/4, etc. It also supports a wide range of speeds, from 10 to 1000 BPM. It provides a GTK+-based user interface and it can use both OSS and ALSA as the audio back-end. (doc)

GTK+

Gtypist

GNU Typist is a universal typing tutor. It can be used to learn and practice touch-typing. Several tutorials are included; in addition to tutorials for the standard QWERTY layout, there are also tutorials for the alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials are primarily in English, however some in other languages are provided. (doc)

Guile

Guile is the GNU Ubiquitous Intelligent Language for Extensions, the official extension language of the GNU system. It is an implementation of the Scheme language which can be easily embedded in other applications to provide a convenient means of extending the functionality of the application without requiring the source code to be rewritten. (doc)

Guile-cv

Guile-CV is a Computer Vision functional programming library for the Guile Scheme language. Guile-CV is based on Vigra (Vision with Generic Algorithms). It comprises a direct binding to vigra_c (a C wrapper to a subset of the Vigra library), and a higher level API written in Guile Scheme. (doc)

Guile-dbi

guile-dbi is a library for Guile that provides a convenient interface to SQL databases. Database programming with guile-dbi is generic in that the same programming interface is presented regardless of which database system is used. It currently supports MySQL, Postgres and SQLite3. (doc)

Guile-gnome

Includes guile-clutter, guile-gnome-gstreamer, guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview. (doc)

Guile-ncurses

guile-ncurses provides Guile language bindings for the ncurses library. (doc)

Guile-opengl

Guile-OpenGL is a library for Guile that provides bindings to the OpenGL graphics API. (doc)

Guile-SDL

Guile-SDL is a set of bindings to the Simple DirectMedia Layer (SDL). With them, Guile programmers can have easy access to graphics, sound and device input (keyboards, joysticks, mice, etc.). (doc)

Guix

GNU Guix is a functional package manager for the GNU system, and is also a distribution thereof. It includes a virtual machine image. Besides the usual package management features, it also supports transactional upgrades and roll-backs, per-user profiles, and much more. It is based on the Nix package manager. (doc)

Gurgle

GURGLE produces database report listings from record and field information from a file. It uses the report to produce (La)TeX-formatted output, plain ASCII text, troff, PostScript, HTML, XML, or any other ASCII-based output format. It may be used for producing large bodies of text where small parts of the text are substituted with information from the database. GURGLE supports GNUSQL, PostgreSQL, MySQL and CA-Ingres databases. (doc)

GNU GV is a graphical user interface to the Ghostscript interpreter. With it, one can view and navigate through PostScript and PDF documents in X Windows. (doc)

GVPE

The GNU Virtual Private Ethernet creates a virtual network with multiple nodes using a variety of transport protocols. It works by creating encrypted host-to-host tunnels between multiple endpoints. (doc)

GWL

GWL is a workflow language that extends Guix"s declarative language for package management to automate execution of programs. Additionally, GWL can use Grid Engine to offload program execution. (doc)

Gxmessage

GNU gxmessage is a program that pops up dialog windows, which display a message to the user and waits for their action. The program then exits with an exit code corresponding to the response. (doc)

Gzip

GNU Gzip provides data compression and decompression utilities; the typical extension is .gz . Unlike the zip format, it compresses a single file; as a result, it is often used in conjunction with tar , resulting in .tar.gz or .tgz , etc. (doc)

HaliFAX

HaliFAX supports sending and viewing faxes, including a wrapper around the lpr command. This package is looking for a maintainer. (doc)

Health

GNU Health is a free medical software system, including support for electronic medical records (EMR), a hospital information system (HIS), and health information system. It supports both Spanish and English interfaces. It has been adopted by the United Nations University for implementation and training, and several hospitals and health ministries around the world. (doc)

Hello

GNU Hello prints the message Hello, world! and then exits. It serves as an example of standard GNU coding practices. As such, it supports command-line arguments, multiple languages, and so on. (doc)

Help2man

GNU help2man is a program that converts the output of standard --help and --version command-line arguments into a manual page automatically. (doc)

Hp2xx

GNU hp2xx converts vector graphics specified in the HP-GL plotter language into a variety of graphical formats, both vector- and raster-based, including EPS, PCX, IMG, and formats intended for use within TeX documents. (doc)

Httptunnel

GNU httptunnel creates a bidirectional data path tunneled in HTTP requests. This allows users behind firewalls to send and receive data that would otherwise be blocked, such as telnet or ssh connections. (doc)

Hurd

The Hurd is the kernel for the GNU system, a replacement and augmentation of standard Unix kernels. It is a collection of protocols for system interaction (file systems, networks, authentication), and servers implementing them. Subprojects include Mach, the microkernel on which the Hurd is based, which provides a basic inter-process communication mechanism, and MIG, an interface generator for Mach. (doc)

Hyperbole

Hyperbole is a programmable information and hypertext system for GNU Emacs. It allows hypertext to be embedded within documents, mail messages and news articles. This permits mouse-based control of the displayed information. (doc)

Icecat

IceCat is the GNU version of the Firefox browser. It is entirely free software, which does not recommend non-free plugins and addons. It also features built-in privacy-protecting features. (doc)

Idutils

The GNU idutils package includes tools to create an index of textual tokens used in a list of file names and then to query that index. Thus, it allows the user to, for example, find all the uses of a particular function in a large programming project. In addition to handling textual tokens, it can also handle numeric constants and the contents of character strings. (doc)

Ignuit

Ignuit is a tool for aiding in the memorization of new information based on the Leitner flashcard system. In this system, new cards are studied with decreasing frequency as they grow older, unless you encounter difficulty memorizing them, after which you encounter them more often. Cards can include embedded audio, images and mathematical formulae and a card collection can be exported to several formats. (doc)

Indent

Indent is a program that makes source code easier to read by reformatting it in a consistent style. It can change the style to one of several different styles such as GNU, BSD or K&R. It has some flexibility to deal with incomplete or malformed syntax. GNU indent offers several extensions over the standard utility. (doc)

Inetutils

Inetutils is a collection of common network programs, such as an ftp client and server, a telnet client and server, and an rsh client and server. (doc)

Inklingreader

GNU InklingReader is a package to support the Wacom Inkling device, including data conversion to various free formats, basic editing features, and an Inkscape plugin. (doc)

Intlfonts

GNU intlfonts contains free X11 fonts in the BDF and TrueType formats. They notably cover a large number of characters from different writing systems: European, Asian, Chinese, Japanese, Korean, Ethiopic and others. (doc)

JACAL

GNU JACAL is an interactive symbolic mathematics program based on Scheme. It manipulate and simplify a range of mathematical expressions such as equations, scalars, vectors, and matrices. (doc)

Jami

Jami is a program for universal communication which respects freedoms and privacy of its users. Jami uses distributed hash tables for establishing communication. This avoids keeping centralized registries of users and storing personal data. (doc)

Java-getopt

java-getopt provides a Java port of the GNU getopt function from glibc. It supports parsing both long and short command-line arguments in a flexible manner, which is completely compatible with the C version. (doc)

Jel

GNU JEL is a library that lets a program accept user-defined expressions to be entered and evaluated at runtime. In fact, the expressions are compiled by JEL to Java bytecode to avoid the performance penalty of adding interpreted expressions to an already-interpreted language. (doc)

Java Training Wheels

GNU Java Training wheels provides a less steep learning curve for learning to program in Java. The system is powered by a preprocessor that adds features to Java such as a superfor macro and a file inclusion system much like the C language"s preprocessor. (doc)

Jwhois

GNU jwhois is a client for the WHOIS protocol, which allows you to query the owner of a domain name. The program uses an extensible configuration file to determine the most appropriate server to query and, upon success displays the result to the user, otherwise it can optionally redirect the query to another server. (doc)

Kawa

GNU Kawa is an implementation of the Scheme programming language that is built on top of the Java platform. It is thus conveniently integrated with Java and benefits from this by having a compiler, optional static typing, and so on. Kawa also serves as a framework for implementing other programming languages on the Java platform. Included in Kawa is qexo, a partial implementation of XQuery in Java. (doc)

Leg

GNU Leg is a set of libraries for game engines and game development. In addition to the libraries, it also includes resource editors designed to make game creation easier. The package is designed to be generic and modular, supporting many different styles of games. (doc)

Less

GNU less is a pager, a program that allows you to view large amounts of text in page-sized chunks. Unlike traditional pagers, it allows both backwards and forwards movement through the document. It also does not have to read the entire input file before starting, so it starts faster than most text editors. (doc)

GNU C Library

The GNU C Library is the standard C library of the GNU system. It defines the system calls and other basic functionality necessary to write programs in the C language. It handles low-level functionality that communicates with the kernel, such as process and file management, as well as higher-level functionality such as string manipulation or command-line argument handling. (doc)

Libcdio

The GNU Compact Disc Input and Control Library (libcdio) is a library for CD-ROM and CD image file access. It allows the developer to add CD access to an application without having to worry about the OS- and device-dependent properties of CD-ROM or the specific details of CD image formats. It includes pycdio, a Python interface to libcdio, and libcdio-paranoia, a library providing jitter-free and error-free audio extraction from CDs. (doc)

Libdbh

libdbh provides disk-based hash tables, providing quick lookup of key-value pairs. While its usage is similar in general to that of (G)DBM, it has a different design supporting advanced, atypical usage. (doc)

Liberty Eiffel

Liberty Eiffel project is the GNU Eiffel Compiler. Eiffel is an advanced object-oriented programming language that emphasizes the design and construction of high-quality and reusable software. Liberty Eiffel is a complete, small and fast Eiffel compiler, including an Eiffel to C compiler, documentation tools, a pretty printer, a debugger and various other tools. It also includes a large library of classes as well as a comprehensive set of wrappers/bindings for widespread Free-Software libraries. (doc)

Libextractor

GNU libextractor is a library for extracting metadata from files. It supports a very large number of file formats, including audio files, document files, and archive files. Each file format is implemented as a plugin, so new formats can be added easily. The package also contains a command-line tool to extract metadata from a file and print the results. (doc)

Libgcrypt

Libgcrypt is a general-purpose cryptographic library. It provides the standard cryptographic building blocks such as symmetric ciphers, hash algorithms, public key algorithms, large integer functions and random number generation. (doc)

Libiconv

libiconv provides an implementation of the iconv function for systems that lack it. iconv is used to convert between character encodings in a program. It supports a wide variety of different encodings. (doc)

Libidn

libidn is a library implementing of the Stringprep, Punycode and IDNA specifications. These are used to encode and decode internationalized domain names. It includes native C, C# and Java libraries. (doc)

Libmatheval

GNU libmatheval is a library to parse and evaluate symbolic expressions input by the user as text. It can be loaded from both C and Fortran. The interpreter is flexible, supporting any number of variables of arbitrary names, decimal and symbolic constants, basic unary and binary operators, and elementary mathematical functions. It can also compute symbolic derivatives and output expressions to strings. (doc)

Libmicrohttpd

GNU libmicrohttpd is a small, embeddable HTTP server implemented as a C library. It makes it easy to run an HTTP server as part of another application. The library is fully HTTP 1.1 compliant. It can listen on multiple ports, supports four different threading models, and supports IPv6. It also features security features such as basic and digest authentication and support for SSL3 and TLS. (doc)

Librejs

LibreJS is an add-on for GNU Icecat and other Firefox-based browsers. It detects non-trivial and non-free JavaScript code from being loaded without your consent when you browse the web. JavaScript code that is free or trivial is allowed to be loaded. (doc)

Libsigsegv

GNU libsigsegv is a library to handle page faults, which occur when a program tries to access an unavailable region of memory, in user mode. By catching and handling page faults, the program can implement pageable virtual memory, stack overflow handlers, and so on. (doc)

Libtasn1

GNU libtasn1 is a library implementing the ASN.1 notation. It is used for transmitting machine-neutral encodings of data objects in computer networking, allowing for formal validation of data according to some specifications. (doc)

Libtool

GNU Libtool helps in the creation and use of shared libraries, by presenting a single consistent, portable interface that hides the usual complexity of working with shared libraries across platforms. (doc)

Libunistring

GNU libunistring is a library providing functions to manipulate Unicode strings and for manipulating C strings according to the Unicode standard. (doc)

Libxmi

GNU libxmi is a library for rasterizing 2D vector graphics for C and C++. It supports drawing 2D primitives into a user-supplied matrix of pixels. It also supports the specification of sophisticated line styles such as multi-colored dashed patterns. Filling and texturing polygons is also supported. (doc)

Lightning

GNU Lightning is a library that generates assembly language code at run-time. Thus, it is useful in creating Just-In-Time compilers. It abstracts over the target CPU by exposing a standardized RISC instruction set to the clients. (doc)

Lilypond

GNU LilyPond is a music typesetter, which produces high-quality sheet music. Music is input in a text file containing control sequences which are interpreted by LilyPond to produce the final document. It is extendable with Guile. (doc)

Lims

GNU LIMS is a laboratory information management system. It is used for managing a scientific laboratory of any field. It consists of a set of modules for the Tryton enterprise management framework, so it is flexible to the specific needs of the laboratory. For example, the system includes modules for sample management, lab equipment integration, accounting and stock management. (doc)

Linux-libre

GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel. It has been modified to remove all non-free binary blobs. (doc)

Liquid War 6

GNU Liquid War 6 is a fast-paced, unique action game. Each player controls a blob of liquid with the goal of conquering the entire map. It has 13 levels by default and over 100 more with a bonus pack; new levels can be easily created using simple image files. (doc)

Lispintro

Lrzsz

GNU lrzsz is a communication package supporting the XMODEM, YMODEM and ZMODEM file transfer protocols. (doc)

Lsh

GNU lsh is a free implementation of the SSH version 2 protocol. It is used to create a secure line of communication between two computers, providing shell access to the server system from the client. It provides both the server daemon and the client application, as well as tools for manipulating key files. (doc)

GNU M4 is an implementation of the M4 macro language, which features some extensions over other implementations, some of which are required by GNU Autoconf. It is used as a macro processor, which means it processes text, expanding macros as it encounters them. It also has some built-in functions, for example to run shell commands or to do arithmetic. (doc)

MAC Changer

GNU MAC Changer is a utility for viewing and changing MAC addresses of networking devices. New addresses may be set explicitly or randomly. They can include MAC addresses of the same or other hardware vendors or, more generally, MAC addresses of the same category of hardware. (doc)

Mailman

GNU Mailman is software for managing email discussion and mailing lists. Both users and administrators generally perform their actions in a web interface, although email and command-line interfaces are also provided. The system features built-in archiving, automatic bounce processing, content filtering, digest delivery, and more. (doc)

Mailutils

GNU Mailutils is a collection of programs for managing, viewing and processing electronic mail. It contains both utilities and server daemons and all operate in a protocol-agnostic way. The underlying libraries are also available, simplifying the addition of mail capabilities to new software. (doc)

Make

Make is a program that is used to control the production of executables or other files from their source files. The process is controlled from a Makefile, in which the developer specifies how each file is generated from its source. It has powerful dependency resolution and the ability to determine when files have to be regenerated after their sources change. GNU make offers many powerful extensions over the standard utility. (doc)

MARST

GNU MARST is an Algol-to-C translator. The package consists of the translator itself, a library that contains the necessary Algol 60 procedures, and a converter that converts existing Algol 60 programs from other representations to the MARST representation. (doc)

Maverik

GNU MAVERIK is a development toolkit that supports 3D virtual environments and interaction with those environments. It sits on top of a low-level rendering engine that uses OpenGL or Mesa, and provides mechanisms to render different kinds of objects, to manage environments and to provide support for 3D interaction. (doc)

Midnight Commander

GNU Midnight Commander is a command-line file manager laid out in a common two-pane format. In addition to standard file management tasks such as copying and moving, Midnight Commander also supports viewing the contents of RPM package files and other archives and managing files on other computers via FTP or FISH. It also includes a powerful text editor for opening text files. (doc)

Mcron

GNU Mcron is a complete replacement for Vixie cron. It is used to run tasks on a schedule, such as every hour or every Monday. Mcron is written in Guile, so its configuration can be written in Scheme; the original cron format is also supported. This package is looking for a maintainer. (doc)

MCSim

GNU MCSim is a package to perform simulations. It supports statistical or deterministic simulation models via Monte Carlo stochastic simulations or dynamic, ODE-based simulations. It also can do Bayesian inference through Markov Chain Monte Carlo simulations. (doc)

MIX Development Kit

GNU MDK is the Mix Development Kit, an emulation of the pedagogical computer MIX and its assembly language MIXAL. MIX has a virtual CPU with standard features such as registers, memory cells, an overflow toggle, comparison flags, input-output devices, and a set of binary instructions. The package includes a compiler, a virtual machine, a GUI for the virtual machine, and more. (doc)

Mediagoblin

GNU MediaGoblin is a free media publishing platform. It runs in a federalized manner, freeing the user from centralized web services. It supports pictures, videos and audio. (doc)

Melting

GNU MELTING computes the enthalpy, entropy and melting temperature of helix-coil transitions of a nucleic acid duplex. (doc)

MemPool

The MemPool library is a stand-alone memory allocation library. It is a block allocator library that uses a single fixed size memory pool to allocate variable sized memory blocks, and exports functions similar to malloc, realloc and free. It is intended to either simulate low memory targets on GNU/Linux and other systems, or to completely replace the system memory management. (doc)

Mes

GNU Mes aims to help create full source bootstrapping for GNU/Linux systems such as GuixSD. It features a mutual self-hosting Scheme interpreter written in a simple C, and a Nyacc-based C compiler written in GNU Guile-compatible Scheme. The Mes C library supports bootstrapping gcc. (doc)

Metahtml

GNU MetaHTML is a server-side programming language designed for the World Wide Web. It has a syntax that is similar to HTML and Lisp. It provides a large function library, including support for sockets, image creation and connections to other programs. (doc)

Mifluz

GNU mifluz is a C++ library to store a full-text inverted index. It stores the occurrences of words in a set of texts in such a way that they can later be searched. Upon searching for a word, the index returns the list of documents which contain that word. (doc)

Mig

Miscfiles

GNU Miscfiles is a collection of common data files. They include, for example, country abbreviations, names and capital cities; currency abbreviations and names; a Best Current Practices index; a map of the ASCII character set; a list of three-letter airport codes; and an English word list. (doc)

MIT/GNU Scheme

GNU/MIT Scheme is an implementation of the Scheme programming language. It provides an interpreter, a compiler and a debugger. It also features an integrated Emacs-like editor and a large runtime library. (doc)

Moe

GNU Moe is a powerful-but-simple-to-use text editor. It works in a modeless manner, and features an intuitive set of key-bindings that assign a degree of severity to each key; for example, key combinations with the Alt key are for harmless commands like cursor movements while combinations with the Control key are for commands that will modify the text. Moe features multiple windows, unlimited undo/redo, unlimited line length, global search and replace, and more. (doc)

Motti

GNU Motti is a simple multiplayer strategy game played in a terminal. The objective of the game is to conquer enemy capitals by occupying and encircling territory. (doc)

Mpc

GNU MPC is a C library for performing arithmetic on complex numbers. It supports arbitrarily high precision and it correctly rounds the results. (doc)

Mpfr

GNU MPFR is a C library for performing multiple-precision, floating-point computations with correct rounding. (doc)

Mpria

GNU MPRIA is a C library for performing rational arithmetic computations with arbitrarily high precision. It builds on the GMP library. (doc)

Mtools

GNU Mtools is a set of utilities for accessing MS-DOS disks from a GNU or Unix system. It supports long file names and multiple disk formats. It also supports some FAT-specific features such as volume labels and FAT-specific file attributes. (doc)

Nana

GNU Nana is a framework for adding assertion checking, logging and performance measurement to C and C++ programs. Operations can either be implemented directly in C or by generating debugger commands. Checking and logging features can be enabled or disabled at compile or runtime. (doc)

Nano

GNU nano is a small and simple text editor for use in a terminal. Besides basic editing, it supports: undo/redo, syntax highlighting, spell checking, justifying, auto-indentation, bracket matching, interactive search-and-replace (with regular expressions), and the editing of multiple files. (doc)

Nano-archimedes

nano-archimedes is a free package for the simulation of quantum systems. It is based on the Wigner equation, a formulation of quantum mechanics in terms of a phase-space which is mathematically equivalent to the Schroedinger equation. nano-archimedes implements the Wigner Monte Carlo method. The code can be easily extended to density functional theory (DFT) and time-dependent ab-initio simulations. (doc)

Ncurses

GNU Ncurses is a library which provides capabilities to write text to a terminal in a terminal-independent manner. It supports pads and color as well as multiple highlights and forms characters. It is typically used to implement user interfaces for command-line applications. The accompanying ncursesw library provides wide character support. (doc)

Nettle

GNU Nettle is a low-level cryptographic library. It is designed to fit in easily in almost any context. It can be easily included in cryptographic toolkits for object-oriented languages or in applications themselves. (doc)

Ocrad

GNU Ocrad is an optical character recognition program based on a feature extraction method. It can read images in PBM, PGM or PPM formats and it produces text in 8-bit or UTF-8 formats. (doc)

Octave

GNU Octave is a high-level interpreted language that is specialized for numerical computations. It can be used for both linear and non-linear applications and it provides great support for visualizing results. Work may be performed both at the interactive command-line as well as via script files. (doc)

Oleo

GNU Oleo is a spreadsheet program. It offers both a terminal interface and a LessTif-based graphical user interface. It features familiar, Emacs-like keybindings. It supports many standard spreadsheet features such as macros and functions. (doc)

OrgaDoc

сайтaDoc is a system for easily maintaining a pool of documents between computers. Documents are synchronized by rsync or unison; no database or HTTP server is required. (doc)

oSIP

GNU oSIP is an implementation of the SIP protocol. It is used to provide multimedia and telecom software developers with an interface to initiate and control SIP sessions. (doc)

Panorama

GNU Panorama is a framework for producing 3D graphics. It can perform various effects, such as focal blur, arbitrary light sources, bump mapping, and several lighting effects. (doc)

Parallel

GNU Parallel is a tool for executing shell jobs in parallel using one or more computers. Jobs can consist of single commands or of scripts and they are executed on lists of files, hosts, users or other items. (doc)

Parted

GNU Parted is a package for creating and manipulating disk partition tables. It includes a library and command-line utility. (doc)

Patch

Patch is a program that applies changes to files based on differences laid out as by the program diff . The changes may be applied to one or more files depending on the contents of the diff file. It accepts several different diff formats. It may also be used to revert previously applied differences. (doc)

Paxutils

GNU paxutils is a suite of archive utilities. It contains versions of the cpio, tar and pax archivers. (doc)

Pcb

GNU PCB is an interactive tool for editing printed circuit board layouts. It features a rats-nest implementation, schematic/netlist import, and design rule checking. It also includes an autorouter and a trace optimizer; and it can produce photorealistic and design review images. (doc)

Pem

GNU Pem is a simple tool for tracking personal income and expenses. It operates from the command line and it stores its data in a basic text format in your home directory. It can easily print reports of your spending on different expenses via a basic search feature. (doc)

Pexec

GNU pexec is a program for executing commands or shell scripts in parallel on one or many computers. As it works, execution parameters such as the environment variables or standard input, output and error can be varied. (doc)

Pies

GNU pies is a program that supervises the invocation and execution of other programs. It reads the list of programs to be started from its configuration file, executes them, and then monitors their status, re-executing them as necessary. (doc)

Plotutils

GNU Plotutils is a package for plotting and working with 2D graphics. It includes a library, libplot , for C and C++ for exporting 2D vector graphics in many file formats. It also has support for 2D vector graphics animations. The package also contains command-line programs for plotting scientific data. (doc)

Poke

GNU poke is an interactive, extensible editor for binary data. Not limited to editing basic entities such as bits and bytes, it provides a full-fledged procedural, interactive programming language designed to describe data structures and to operate on them. (doc)

Proxyknife

GNU proxyknife is a tool to validate free proxies from behind a firewall. The validation process is fully customizable to meet your needs. (doc)

PSPP

GNU PSPP is a statistical analysis program. It can perform descriptive statistics, T-tests, linear regression and non-parametric tests. It features both a graphical interface as well as command-line input. PSPP is designed to interoperate with Gnumeric, LibreOffice and OpenOffice. Data can be imported from spreadsheets, text files and database sources and it can be output in text, PostScript, PDF or HTML. (doc)

Psychosynth

GNU Psychosynth is an interactive, modular soft-synth. It emulates a 3D surface on which modules are placed and manipulated, generating and altering music. Psychosynth consists of a C++ library, a 3D interface and a command-line interface. (doc)

Pth

GNU Pth is a portable library providing non-preemptive, priority-based scheduling for multiple execution threads. Each thread has its own program-counter, run-time stack, signal mask and errno variable. Threads are scheduled in a cooperative way, rather than in the standard preemptive way, such that they are managed according to priority and events. However, Pth also features emulation of POSIX.1c threads (pthreads) for backwards compatibility. (doc)

Pyconfigure

GNU pyconfigure provides template files for easily implementing standards-compliant configure scripts and Makefiles for Python-based packages. It is designed to work alongside existing Python setup scripts, making it easy to integrate into existing projects. Powerful and flexible Autoconf macros are available, allowing you to easily make adjustments to the installation procedure based on the capabilities of the target computer. (doc)

Qexo

R is a language and environment for statistical computing and graphics. It provides a variety of statistical techniques, such as linear and nonlinear modeling, classical statistical tests, time-series analysis, classification and clustering. It also provides robust support for producing publication-quality data plots. A large amount of 3rd-party packages are available, greatly increasing its breadth and scope. (doc)

Radius

Radius is a server for remote user authentication and accounting. It is generally useful for networks that require a centralized authentication and accounting services for its workstations. Authentication can be performed in a variety of ways, such as via /etc/passwd or credentials stored in an SQL database. (doc)

RCS

RCS is the original Revision Control System. It works on a file-by-file basis, in contrast to subsequent version control systems such as CVS, Subversion, and Git. This can make it suitable for system administration files, for example, which are often inherently local to one machine. (doc)

Readline

The GNU readline library allows users to edit command lines as they are typed in. It can maintain a searchable history of previously entered commands, letting you easily recall, edit and re-enter past commands. It features both Emacs-like and vi-like keybindings, making its usage comfortable for anyone. (doc)

Recutils

GNU Recutils is a set of tools and libraries for creating and manipulating text-based, human-editable databases. Despite being text-based, databases created with Recutils carry all of the expected features such as unique fields, primary keys, time stamps and more. Many different field types are supported, as is encryption. (doc)

Reftex

GNU RefTex is a package for implementing labels, references, citations and indices in LaTeX documents. It works by wrapping around four LaTeX macros: label, ref, cite and index. It automates the common tasks that normally are required when using these macros. (doc)

Remotecontrol

GNU Remotecontrol is a web application for managing IP-enabled HVAC thermostats and other building automation devices. The application can read data from and write data to multiple such devices. (doc)

Rottlog

GNU Rot[t]log is a program for managing log files. It is used to automatically rotate out log files when they have reached a given size or according to a given schedule. It can also be used to automatically compress and archive such logs. Rot[t]log will mail reports of its activity to the system administrator. (doc)

Rpge

The GNU Role Playing Game Engine provides an engine for creating two-dimensional, graphical role-playing games, providing, for example, a sprite-tiling grid, sprite rendering, and event handling. (doc)

Rush

GNU Rush is a restricted user shell, for systems on which users are to be provided with only limited functionality or resources. Administrators set user rights via a configuration file which can be used to limit, for example, the commands that can be executed, CPU time, or virtual memory usage. (doc)

Sather

GNU Sather is an object-oriented programming language similar to Eiffel. It is designed to be simple, efficient, safe, and non-proprietary. It features garbage collection, statically-checked strong typing, multiple inheritance, parameterized classes and more. This package consists of a compiler, a class library, the language specification and programming manual, and a browser for displaying sources and directed graphs of class inheritance. (doc)

SCM

GNU SCM is an implementation of Scheme. This implementation includes Hobbit, a Scheme-to-C compiler, which can generate C files whose binaries can be dynamically or statically linked with a SCM executable. (doc)

Screen

GNU Screen is a terminal window manager that multiplexes a single terminal between several processes. The virtual terminals each provide features such as a scroll-back buffer and a copy-and-paste mechanism. Screen then manages the different virtual terminals, allowing you to easily switch between them, to detach them from the current session, or even splitting the view to show two terminals at once. (doc)

Sed

Sed is a non-interactive, text stream editor. It receives a text input from a file or from standard input and it then applies a series of text editing commands to the stream and prints its output to standard output. It is often used for substituting text patterns in a stream. The GNU implementation offers several extensions over the standard utility. (doc)

Serveez

GNU Serveez is a server framework providing the routines necessary to easily implement IP-based servers in your application. It demonstrates aspects of network programming in a portable manner, making it convenient for both simplifying the process of adding a server to your application or for learning about how network services work. Several example servers are provided already, such as an HTTP server and an IRC server. (doc)

Sharutils

GNU sharutils is a package for creating and manipulating shell archives that can be readily emailed. A shell archive is a file that can be processed by a Bourne-type shell to unpack the original collection of files. This package is mostly for compatibility and historical interest. (doc)

Shepherd

The GNU Shepherd is a daemon-managing daemon, meaning that it supervises the execution of system services, replacing similar functionality found in typical init systems. It provides dependency-handling through a convenient interface and is based on GNU Guile. (doc)

Shishi

GNU Shishi is a free implementation of the Kerberos 5 network security system. It is used to allow non-secure network nodes to communicate in a secure manner through client-server mutual authentication via tickets. (doc)

Shmm

GNU SHMM is a shared memory manager. It can read or write to shared memory. It also supports other commands such as locking or unlocking a block of shared memory identified by key and size. (doc)

Shtool

GNU shtool is a multipurpose shell tool. It can perform the functions of many different commands, in order to provide a single tool to distribute with a source distribution in order to ensure portability of shell scripts. For example, shtool can perform the jobs of the common commands install , mkdir or echo on systems that lack them. (doc)

Sipwitch

GNU SIP Witch is a peer-to-peer Voice-over-IP server that uses the SIP protocol. Calls can be made from behind NAT firewalls and without the need for a service provider. Its peer-to-peer design ensures that there is no central point for media intercept or capture and thus it can be used to construct a secure telephone system that operates over the public internet. (doc)

SLIB

GNU SLIB is a portable common library for the Scheme programming language. It supports a large variety of different Scheme implementations, offering them a framework for using packages of Scheme procedures and syntax. (doc)

Smalltalk

GNU Smalltalk is a free implementation of the Smalltalk language. It implements the ANSI standard for the language and also includes extra classes such as ones for networking and GUI programming. (doc)

Solfege

GNU Solfege is a program for practicing musical ear-training. With it, you can practice your recognition of various musical intervals and chords. It features a statistics overview so you can monitor your progress across several sessions. Solfege is also designed to be extensible so you can easily write your own lessons. (doc)

SpaceChart

GNU SpaceChart lets you view how the stars are distributed in three-dimensional space. It allows you, for example, to determine the distances between stars, to view them from any point of view, or to filter your view by spectral class and luminosity. (doc)

Speex

GNU Speex is a patent-free audio compression codec specially designed for speech. It is well-adapted to internet applications, such as VoIP. It features compression of different bands in the same bitstream, intensity stereo encoding, and voice activity detection. (doc)

Spell

Spell is a command-line spell-checking program. It reads through a text input and prints each misspelled word on a line of its own. It is implemented as a wrapper for GNU aspell or ispell. (doc)

Sqltutor

GNU Sqltutor is a web-based, interactive SQL tutorial. It features multiple tutorials available in different languages. The tutorials present a series of questions in a dialog and, when complete, they display a final evaluation including correct answers for wrong solutions. (doc)

Src-highlite

GNU source-highlight reads in a source code file and produces an output file in which the keywords are highlighted in different colors to designate their syntactic role. It supports over 150 different languages and it can output to 8 different formats, including HTML, LaTeX and ODF. It can also output to ANSI color escape sequences, so that highlighted source code can be seen in a terminal. (doc)

Spread Sheet Widget

A Gtk+ widget providing a 2 dimensional array to view and manipulate tabular data similar to that provided by popular spread sheet programs. The design follows the model-view-controller paradigm and is O(1) in both time and space, providing very fast and efficient operation even on very large data. Features such as cut and paste, drag and drop etc are included. (doc)

Stow

GNU Stow is a symlink manager. It generates symlinks to directories of data and makes them appear to be merged into the same directory. It is typically used for managing software packages installed from source, by letting you install them apart in distinct directories and then create symlinks to the files in a common directory such as /usr/local. (doc)

Stump

GNU STUMP is a robomoderator program for USENET newsgroups and mailing lists, featuring web-based moderation. It supports group moderation via multiple human moderators. It can also automatically reject non-conforming messages without human intervention. It includes a web interface. (doc)

Superopt

GNU Superopt is a function sequence generator for superoptimization. It uses an exhaustive generate-and-test approach to find the shortest instruction sequence for a given function. (doc)

Swbis

Swbis is a software administration system specified by POSIX. It features network-transparent management of software packages for system administrators. For example, entire file system directories can be copied host-to-host across a network in a transparent manner. The package also features advanced tarball creation methods and integrity checking mechanisms. (doc)

Talkfilters

The GNU Talk Filters are programs that convert English text into stereotyped or otherwise humorous dialects. The filters are provided as a C library, so they can easily be integrated into other programs. (doc)

Tar

Tar provides the ability to create tar archives, as well as the ability to extract, update or list files in an existing archive. It is useful for combining many files into one larger file, while maintaining directory structure and file information such as permissions and creation/modification dates. GNU tar offers many extensions over the standard utility. (doc)

Termcap

GNU termcap is a library and a database that are used to enable the use of display terminals in a terminal-independent manner. The database describes the capabilities of many different display terminals. The library can then adapt generalized instructions given by a program to the specific capabilities of the display terminal as found in the database. (doc)

Termutils

The GNU Termutils package contains two programs, tput and tabs . tput is used in shell scripts to manipulate the terminal display, for example by clearing it or moving the cursor to a specific point, centering text or underlining text. tabs is used to specify and set hardware tab stops on terminals that support it. (doc)

Teseq

GNU Teseq is a program that analyzes files that contain control sequences. It converts the sequences that it encounters into a human-readable description of what actions those sequences perform. It can also translate its output back into machine-readable control sequences. (doc)

TeX for the Impatient

TeX for the Impatient is a ~350 page book on TeX, plain TeX and Eplain, written by Paul Abrahams, Kathryn Hargreaves and Karl Berry. (doc)

Texinfo

Texinfo is the official documentation format of the GNU project. It uses a single source file using explicit commands to produce a final document in any of several supported output formats, such as HTML or PDF. This package includes both the tools necessary to produce Info documents from their source and the command-line Info reader. The emphasis of the language is on expressing the content semantically, avoiding physical markup commands. (doc)doc

The vc-dwim package contains two tools, vc-dwim and vc-chlog . vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and using version control at the same time, for example by printing a reminder when a file change has been described in the ChangeLog but the file has not been added to the VC. vc-chlog scans changed files and generates standards-compliant ChangeLog entries based on the changes that it detects. (doc)

VCDImager

GNU VCDImager is a suite of programs for working with Video CDs and Super Video CDs. It can be used for authoring, disassembling and analyzing discs. It supports full playback control, segment play items, automatic padding of MPEG streams on the fly, and extraction of Video CDs into files. (doc)

Vera

V.E.R.A. (Virtual Entity of Relevant Acronyms) is a list of computing acronyms distributed as an info document. (doc)

Vmgen

GNU WB is a disk-based, sorted, associative-array database package for C, Scheme, Java and C#. Rather than being implemented via hashing, WB uses B-trees, which are optimized for using the minimum number of disk operations. (doc doc)

XBoard

GNU XBoard is a graphical board for all varieties of chess, including international chess, xiangqi (Chinese chess), shogi (Japanese chess) and Makruk. Several lesser-known variants are also supported. It presents a fully interactive graphical interface and it can load and save games in the Portable Game Notation. (doc)

Xlogmaster

GNU Xlogmaster is a program with a graphical user interface that lets you monitor your system logs in a convenient way. The logs can be displayed with filters for highlighting or hiding lines. The program can also be used to automate taking actions upon user-defined events. (doc)

Xnee

GNU Xnee is a program that can record, replay and distribute user actions in X11. It can be used to automate user interactions for testing or demonstration purposes. (doc)

Xorriso

GNU Xorriso is a tool for copying files to and from ISO 9660 Rock Ridge, a.k.a. Compact Disc File System, filesystems and it allows session-wise manipulation of them. It features a formatter and burner for CD, DVD and BD. It can operate on existing ISO images or it can create new ones. xorriso can then be used to copy files directly into or out of ISO files. (doc)

Zile

GNU Zile is a lightweight Emacs clone. It usage is similar to the default Emacs configuration, but it carries a much lighter feature set. (

Originally published in the book Open Sources . Richard Stallman was , but contributed this article so that the ideas of the free software movement would not be entirely absent from that book.

The first software-sharing community

When I started working at the MIT Artificial Intelligence Lab in 1971, I became part of a software-sharing community that had existed for many years. Sharing of software was not limited to our particular community; it is as old as computers, just as sharing of recipes is as old as cooking. But we did it more than most.

The AI Lab used a timesharing operating system called ITS (the Incompatible Timesharing System) that the lab"s staff hackers (1) had designed and written in assembler language for the Digital PDP -10, one of the large computers of the era. As a member of this community, an AI Lab staff system hacker, my job was to improve this system.

We did not call our software “free software”, because that term did not yet exist; but that is what it was. Whenever people from another university or a company wanted to port and use a program, we gladly let them. If you saw someone using an unfamiliar and interesting program, you could always ask to see the source code, so that you could read it, change it, or cannibalize parts of it to make a new program.

(1) The use of “hacker” to mean “security breaker” is a confusion on the part of the mass media. We hackers refuse to recognize that meaning, and continue using the word to mean someone who loves to program, someone who enjoys playful cleverness, or the combination of the two. See my article, On Hacking .

The collapse of the community

The situation changed drastically in the early 1980s when Digital discontinued the PDP-10 series. Its architecture, elegant and powerful in the 60s, could not extend naturally to the larger address spaces that were becoming feasible in the 80s. This meant that nearly all of the programs composing ITS were obsolete.

The AI Lab hacker community had already collapsed, not long before. In 1981, the spin-off company Symbolics had hired away nearly all of the hackers from the AI Lab, and the depopulated community was unable to maintain itself. (The book Hackers, by Steve Levy, describes these events, as well as giving a clear picture of this community in its prime.) When the AI Lab bought a new PDP-10 in 1982, its administrators decided to use Digital"s nonfree timesharing system instead of ITS.

The modern computers of the era, such as the VAX or the 68020, had their own operating systems, but none of them were free software: you had to sign a nondisclosure agreement even to get an executable copy.

This meant that the first step in using a computer was to promise not to help your neighbor. A cooperating community was forbidden. The rule made by the owners of proprietary software was, “If you share with your neighbor, you are a pirate. If you want any changes, beg us to make them.”

The idea that the proprietary software social system—the system that says you are not allowed to share or change software—is antisocial, that it is unethical, that it is simply wrong, may come as a surprise to some readers. But what else could we say about a system based on dividing the public and keeping users helpless? Readers who find the idea surprising may have taken the proprietary software social system as a given, or judged it on the terms suggested by proprietary software businesses. Software publishers have worked long and hard to convince people that there is only one way to look at the issue.

When software publishers talk about “enforcing” their “rights” or “stopping piracy ”, what they actually say is secondary. The real message of these statements is in the unstated assumptions they take for granted, which the public is asked to accept without examination. Let"s therefore examine them.

One assumption is that software companies have an unquestionable natural right to own software and thus have power over all its users. (If this were a natural right, then no matter how much harm it does to the public, we could not object.) Interestingly, the US Constitution and legal tradition reject this view; copyright is not a natural right, but an artificial government-imposed monopoly that limits the users" natural right to copy.

Another unstated assumption is that the only important thing about software is what jobs it allows you to do—that we computer users should not care what kind of society we are allowed to have.

A third assumption is that we would have no usable software (or would never have a program to do this or that particular job) if we did not offer a company power over the users of the program. This assumption may have seemed plausible, before the free software movement demonstrated that we can make plenty of useful software without putting chains on it.

If we decline to accept these assumptions, and judge these issues based on ordinary commonsense morality while placing the users first, we arrive at very different conclusions. Computer users should be free to modify programs to fit their needs, and free to share software, because helping other people is the basis of society.

A stark moral choice

With my community gone, to continue as before was impossible. Instead, I faced a stark moral choice.

The easy choice was to join the proprietary software world, signing nondisclosure agreements and promising not to help my fellow hacker. Most likely I would also be developing software that was released under nondisclosure agreements, thus adding to the pressure on other people to betray their fellows too.

I could have made money this way, and perhaps amused myself writing code. But I knew that at the end of my career, I would look back on years of building walls to divide people, and feel I had spent my life making the world a worse place.

I had already experienced being on the receiving end of a nondisclosure agreement, when someone refused to give me and the MIT AI Lab the source code for the control program for our printer. (The lack of certain features in this program made use of the printer extremely frustrating.) So I could not tell myself that nondisclosure agreements were innocent. I was very angry when he refused to share with us; I could not turn around and do the same thing to everyone else.

Another choice, straightforward but unpleasant, was to leave the computer field. That way my skills would not be misused, but they would still be wasted. I would not be culpable for dividing and restricting computer users, but it would happen nonetheless.

So I looked for a way that a programmer could do something for the good. I asked myself, was there a program or programs that I could write, so as to make a community possible once again?

The answer was clear: what was needed first was an operating system. That is the crucial software for starting to use a computer. With an operating system, you can do many things; without one, you cannot run the computer at all. With a free operating system, we could again have a community of cooperating hackers—and invite anyone to join. And anyone would be able to use a computer without starting out by conspiring to deprive his or her friends.

As an operating system developer, I had the right skills for this job. So even though I could not take success for granted, I realized that I was elected to do the job. I chose to make the system compatible with Unix so that it would be portable, and so that Unix users could easily switch to it. The name GNU was chosen, following a hacker tradition, as a recursive acronym for “GNU"s Not Unix.” It is pronounced as one syllable with a hard g .

An operating system does not mean just a kernel, barely enough to run other programs. In the 1970s, every operating system worthy of the name included command processors, assemblers, compilers, interpreters, debuggers, text editors, mailers, and much more. ITS had them, Multics had them, VMS had them, and Unix had them. The GNU operating system would include them too.

Later I heard these words, attributed to Hillel (1):

If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?

The decision to start the GNU Project was based on a similar spirit.

(1) As an Atheist, I don"t follow any religious leaders, but I sometimes find I admire something one of them has said.

Free as in freedom

The term “free software” is sometimes misunderstood—it has nothing to do with price. It is about freedom. Here, therefore, is the definition of free software.

A program is free software, for you, a particular user, if:

  • You have the freedom to run the program as you wish, for any purpose.
  • You have the freedom to modify the program to suit your needs. (To make this freedom effective in practice, you must have access to the source code, since making changes in a program without having the source code is exceedingly difficult.)
  • You have the freedom to redistribute copies, either gratis or for a fee.
  • You have the freedom to distribute modified versions of the program, so that the community can benefit from your improvements.

Since “free” refers to freedom, not to price, there is no contradiction between selling copies and free software. In fact, the freedom to sell copies is crucial: collections of free software sold on CD-ROMs are important for the community, and selling them is an important way to raise funds for free software development. Therefore, a program which people are not free to include on these collections is not free software.

Because of the ambiguity of “free”, people have long looked for alternatives, but no one has found a better term. The English language has more words and nuances than any other, but it lacks a simple, unambiguous, word that means “free”, as in freedom—“unfettered” being the word that comes closest in meaning. Such alternatives as “liberated”, “freedom”, and “open” have either the wrong meaning or some other disadvantage.

GNU software and the GNU system

Developing a whole system is a very large project. To bring it into reach, I decided to adapt and use existing pieces of free software wherever that was possible. For example, I decided at the very beginning to use TeX as the principal text formatter; a few years later, I decided to use the X Window System rather than writing another window system for GNU.

Because of these decisions, and others like them, the GNU system is not the same as the collection of all GNU software. The GNU system includes programs that are not GNU software, programs that were developed by other people and projects for their own purposes, but which we can use because they are free software.

Commencing the project

In January 1984 I quit my job at MIT and began writing GNU software. Leaving MIT was necessary so that MIT would not be able to interfere with distributing GNU as free software. If I had remained on the staff, MIT could have claimed to own the work, and could have imposed their own distribution terms, or even turned the work into a proprietary software package. I had no intention of doing a large amount of work only to see it become useless for its intended purpose: creating a new software-sharing community.

However, Professor Winston, then the head of the MIT AI Lab, kindly invited me to keep using the lab"s facilities.

The first steps

Shortly before beginning the GNU Project, I heard about the Free University Compiler Kit, also known as VUCK. (The Dutch word for “free” is written with a v .) This was a compiler designed to handle multiple languages, including C and Pascal, and to support multiple target machines. I wrote to its author asking if GNU could use it.

He responded derisively, stating that the university was free but the compiler was not. I therefore decided that my first program for the GNU Project would be a multilanguage, multiplatform compiler.

Hoping to avoid the need to write the whole compiler myself, I obtained the source code for the Pastel compiler, which was a multiplatform compiler developed at Lawrence Livermore Lab. It supported, and was written in, an extended version of Pascal, designed to be a system-programming language. I added a C front end, and began porting it to the Motorola 68000 computer. But I had to give that up when I discovered that the compiler needed many megabytes of stack space, and the available 68000 Unix system would only allow 64k.

I then realized that the Pastel compiler functioned by parsing the entire input file into a syntax tree, converting the whole syntax tree into a chain of “instructions”, and then generating the whole output file, without ever freeing any storage. At this point, I concluded I would have to write a new compiler from scratch. That new compiler is now known as GCC ; none of the Pastel compiler is used in it, but I managed to adapt and use the C front end that I had written. But that was some years later; first, I worked on GNU Emacs.

GNU Emacs

I began work on GNU Emacs in September 1984, and in early 1985 it was beginning to be usable. This enabled me to begin using Unix systems to do editing; having no interest in learning to use vi or ed, I had done my editing on other kinds of machines until then.

At this point, people began wanting to use GNU Emacs, which raised the question of how to distribute it. Of course, I put it on the anonymous ftp server on the MIT computer that I used. (This computer, prep.ai.mit.edu, thus became the principal GNU ftp distribution site; when it was decommissioned a few years later, we transferred the name to our new ftp server.) But at that time, many of the interested people were not on the Internet and could not get a copy by ftp. So the question was, what would I say to them?

I could have said, “Find a friend who is on the net and who will make a copy for you.” Or I could have done what I did with the original PDP-10 Emacs: tell them, “Mail me a tape and a SASE , and I will mail it back with Emacs on it.” But I had no job, and I was looking for ways to make money from free software. So I announced that I would mail a tape to whoever wanted one, for a fee of $150. In this way, I started a free software distribution business, the precursor of the companies that today distribute entire GNU/Linux system distributions.

Is a program free for every user?

If a program is free software when it leaves the hands of its author, this does not necessarily mean it will be free software for everyone who has a copy of it. For example, public domain software (software that is not copyrighted) is free software; but anyone can make a proprietary modified version of it. Likewise, many free programs are copyrighted but distributed under simple permissive licenses which allow proprietary modified versions.

The paradigmatic example of this problem is the X Window System. Developed at MIT, and released as free software with a permissive license, it was soon adopted by various computer companies. They added X to their proprietary Unix systems, in binary form only, and covered by the same nondisclosure agreement. These copies of X were no more free software than Unix was.

The developers of the X Window System did not consider this a problem—they expected and intended this to happen. Their goal was not freedom, just “success”, defined as “having many users.” They did not care whether these users had freedom, only that they should be numerous.

This led to a paradoxical situation where two different ways of counting the amount of freedom gave different answers to the question, “Is this program free?” If you judged based on the freedom provided by the distribution terms of the MIT release, you would say that X was free software. But if you measured the freedom of the average user of X, you would have to say it was proprietary software. Most X users were running the proprietary versions that came with Unix systems, not the free version.

Copyleft and the GNU GPL

The goal of GNU was to give users freedom, not just to be popular. So we needed to use distribution terms that would prevent GNU software from being turned into proprietary software. The method we use is called “copyleft”.(1)

Copyleft uses copyright law, but flips it over to serve the opposite of its usual purpose: instead of a means for restricting a program, it becomes a means for keeping the program free.

The central idea of copyleft is that we give everyone permission to run the program, copy the program, modify the program, and distribute modified versions—but not permission to add restrictions of their own. Thus, the crucial freedoms that define “free software” are guaranteed to everyone who has a copy; they become inalienable rights.

For an effective copyleft, modified versions must also be free. This ensures that work based on ours becomes available to our community if it is published. When programmers who have jobs as programmers volunteer to improve GNU software, it is copyleft that prevents their employers from saying, “You can"t share those changes, because we are going to use them to make our proprietary version of the program.”

The requirement that changes must be free is essential if we want to ensure freedom for every user of the program. The companies that privatized the X Window System usually made some changes to port it to their systems and hardware. These changes were small compared with the great extent of X, but they were not trivial. If making changes were an excuse to deny the users freedom, it would be easy for anyone to take advantage of the excuse.

A related issue concerns combining a free program with nonfree code. Such a combination would inevitably be nonfree; whichever freedoms are lacking for the nonfree part would be lacking for the whole as well. To permit such combinations would open a hole big enough to sink a ship. Therefore, a crucial requirement for copyleft is to plug this hole: anything added to or combined with a copylefted program must be such that the larger combined version is also free and copylefted.

The specific implementation of copyleft that we use for most GNU software is the GNU General Public License, or GNU GPL for short. We have other kinds of copyleft that are used in specific circumstances. GNU manuals are copylefted also, but use a much simpler kind of copyleft, because the complexity of the GNU GPL is not necessary for manuals.(2)

(1) In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed me a letter. On the envelope he had written several amusing sayings, including this one: “Copyleft—all rights reversed.” I used the word “copyleft” to name the distribution concept I was developing at the time.

Free Software Foundation employees have written and maintained a number of GNU software packages. Two notable ones are the C library and the shell. The GNU C library is what every program running on a GNU/Linux system uses to communicate with Linux. It was developed by a member of the Free Software Foundation staff, Roland McGrath. The shell used on most GNU/Linux systems is BASH , the Bourne Again Shell(1), which was developed by FSF employee Brian Fox.

We funded development of these programs because the GNU Project was not just about tools or a development environment. Our goal was a complete operating system, and these programs were needed for that goal.

(1) “Bourne Again Shell” is a play on the name “Bourne Shell”, which was the usual shell on Unix.

Free software support

The free software philosophy rejects a specific widespread business practice, but it is not against business. When businesses respect the users" freedom, we wish them success.

Selling copies of Emacs demonstrates one kind of free software business. When the FSF took over that business, I needed another way to make a living. I found it in selling services relating to the free software I had developed. This included teaching, for subjects such as how to program GNU Emacs and how to customize GCC, and software development, mostly porting GCC to new platforms.

Today each of these kinds of free software business is practiced by a number of corporations. Some distribute free software collections on CD-ROM; others sell support at levels ranging from answering user questions, to fixing bugs, to adding major new features. We are even beginning to see free software companies based on launching new free software products.

Watch out, though—a number of companies that associate themselves with the term “open source” actually base their business on nonfree software that works with free software. These are not free software companies, they are proprietary software companies whose products tempt users away from freedom. They call these programs “value-added packages”, which shows the values they would like us to adopt: convenience above freedom. If we value freedom more, we should call them “freedom-subtracted” packages.

Technical goals

The principal goal of GNU is to be free software. Even if GNU had no technical advantage over Unix, it would have a social advantage, allowing users to cooperate, and an ethical advantage, respecting the user"s freedom.

But it was natural to apply the known standards of good practice to the work—for example, dynamically allocating data structures to avoid arbitrary fixed size limits, and handling all the possible 8-bit codes wherever that made sense.

In addition, we rejected the Unix focus on small memory size, by deciding not to support 16-bit machines (it was clear that 32-bit machines would be the norm by the time the GNU system was finished), and to make no effort to reduce memory usage unless it exceeded a megabyte. In programs for which handling very large files was not crucial, we encouraged programmers to read an entire input file into core, then scan its contents without having to worry about I/O.

These decisions enabled many GNU programs to surpass their Unix counterparts in reliability and speed.

Donated computers

As the GNU Project"s reputation grew, people began offering to donate machines running Unix to the project. These were very useful, because the easiest way to develop components of GNU was to do it on a Unix system, and replace the components of that system one by one. But they raised an ethical issue: whether it was right for us to have a copy of Unix at all.

Unix was (and is) proprietary software, and the GNU Project"s philosophy said that we should not use proprietary software. But, applying the same reasoning that leads to the conclusion that violence in self defense is justified, I concluded that it was legitimate to use a proprietary package when that was crucial for developing a free replacement that would help others stop using the proprietary package.

But, even if this was a justifiable evil, it was still an evil. Today we no longer have any copies of Unix, because we have replaced them with free operating systems. If we could not replace a machine"s operating system with a free one, we replaced the machine instead.

The GNU Task List

As the GNU Project proceeded, and increasing numbers of system components were found or developed, eventually it became useful to make a list of the remaining gaps. We used it to recruit developers to write the missing pieces. This list became known as the GNU Task List. In addition to missing Unix components, we listed various other useful software and documentation projects that, we thought, a truly complete system ought to have.

Today (1), hardly any Unix components are left in the GNU Task List—those jobs had been done, aside from a few inessential ones. But the list is full of projects that some might call “applications”. Any program that appeals to more than a narrow class of users would be a useful thing to add to an operating system.

Even games are included in the task list—and have been since the beginning. Unix included games, so naturally GNU should too. But compatibility was not an issue for games, so we did not follow the list of games that Unix had. Instead, we listed a spectrum of different kinds of games that users might like.

(1) That was written in 1998. In 2009 we no longer maintain a long task list. The community develops free software so fast that we can"t even keep track of it all. Instead, we have a list of High Priority Projects, a much shorter list of projects we really want to encourage people to write.

The GNU Library GPL

The GNU C library uses a special kind of copyleft called the GNU Library General Public License(1), which gives permission to link proprietary software with the library. Why make this exception?

It is not a matter of principle; there is no principle that says proprietary software products are entitled to include our code. (Why contribute to a project predicated on refusing to share with us?) Using the LGPL for the C library, or for any library, is a matter of strategy.

The C library does a generic job; every proprietary system or compiler comes with a C library. Therefore, to make our C library available only to free software would not have given free software any advantage—it would only have discouraged use of our library.

One system is an exception to this: on the GNU system (and this includes GNU/Linux), the GNU C library is the only C library. So the distribution terms of the GNU C library determine whether it is possible to compile a proprietary program for the GNU system. There is no ethical reason to allow proprietary applications on the GNU system, but strategically it seems that disallowing them would do more to discourage use of the GNU system than to encourage development of free applications. That is why using the Library GPL is a good strategy for the C library.

For other libraries, the strategic decision needs to be considered on a case-by-case basis. When a library does a special job that can help write certain kinds of programs, then releasing it under the GPL, limiting it to free programs only, is a way of helping other free software developers, giving them an advantage against proprietary software.

Consider GNU Readline, a library that was developed to provide command-line editing for BASH. Readline is released under the ordinary GNU GPL, not the Library GPL. This probably does reduce the amount Readline is used, but that is no loss for us. Meanwhile, at least one useful application has been made free software specifically so it could use Readline, and that is a real gain for the community.

Proprietary software developers have the advantages money provides; free software developers need to make advantages for each other. I hope some day we will have a large collection of GPL-covered libraries that have no parallel available to proprietary software, providing useful modules to serve as building blocks in new free software, and adding up to a major advantage for further free software development.

(1) This license is now called the GNU Lesser General Public License, to avoid giving the idea that all libraries ought to use it. See Why you shouldn"t use the Lesser GPL for your next library for more information.

Scratching an itch?

Eric Raymond says that “Every good work of software starts by scratching a developer"s personal itch.” Maybe that happens sometimes, but many essential pieces of GNU software were developed in order to have a complete free operating system. They come from a vision and a plan, not from impulse.

For example, we developed the GNU C library because a Unix-like system needs a C library, BASH because a Unix-like system needs a shell, and GNU tar because a Unix-like system needs a tar program. The same is true for my own programs—the GNU C compiler, GNU Emacs, GDB and GNU Make.

Some GNU programs were developed to cope with specific threats to our freedom. Thus, we developed gzip to replace the Compress program, which had been lost to the community because of the LZW patents. We found people to develop LessTif, and more recently started GNOME and Harmony, to address the problems caused by certain proprietary libraries (see below). We are developing the GNU Privacy Guard to replace popular nonfree encryption software, because users should not have to choose between privacy and freedom.

Of course, the people writing these programs became interested in the work, and many features were added to them by various people for the sake of their own needs and interests. But that is not why the programs exist.

Unexpected developments

At the beginning of the GNU Project, I imagined that we would develop the whole GNU system, then release it as a whole. That is not how it happened.

Since each component of the GNU system was implemented on a Unix system, each component could run on Unix systems long before a complete GNU system existed. Some of these programs became popular, and users began extending them and porting them—to the various incompatible versions of Unix, and sometimes to other systems as well.

The process made these programs much more powerful, and attracted both funds and contributors to the GNU Project. But it probably also delayed completion of a minimal working system by several years, as GNU developers" time was put into maintaining these ports and adding features to the existing components, rather than moving on to write one missing component after another.

The GNU Hurd

By 1990, the GNU system was almost complete; the only major missing component was the kernel. We had decided to implement our kernel as a collection of server processes running on top of Mach. Mach is a microkernel developed at Carnegie Mellon University and then at the University of Utah; the GNU Hurd is a collection of servers (i.e., a herd of GNUs) that run on top of Mach, and do the various jobs of the Unix kernel. The start of development was delayed as we waited for Mach to be released as free software, as had been promised.

One reason for choosing this design was to avoid what seemed to be the hardest part of the job: debugging a kernel program without a source-level debugger to do it with. This part of the job had been done already, in Mach, and we expected to debug the Hurd servers as user programs, with GDB. But it took a long time to make that possible, and the multithreaded servers that send messages to each other have turned out to be very hard to debug. Making the Hurd work solidly has stretched on for many years.

Alix

The GNU kernel was not originally supposed to be called the Hurd. Its original name was Alix—named after the woman who was my sweetheart at the time. She, a Unix system administrator, had pointed out how her name would fit a common naming pattern for Unix system versions; as a joke, she told her friends, “Someone should name a kernel after me.” I said nothing, but decided to surprise her with a kernel named Alix.

It did not stay that way. Michael (now Thomas) Bushnell, the main developer of the kernel, preferred the name Hurd, and redefined Alix to refer to a certain part of the kernel—the part that would trap system calls and handle them by sending messages to Hurd servers.

Later, Alix and I broke up, and she changed her name; independently, the Hurd design was changed so that the C library would send messages directly to servers, and this made the Alix component disappear from the design.

But before these things happened, a friend of hers came across the name Alix in the Hurd source code, and mentioned it to her. So she did have the chance to find a kernel named after her.

Linux and GNU/Linux

The GNU Hurd is not suitable for production use, and we don"t know if it ever will be. The capability-based design has problems that result directly from the flexibility of the design, and it is not clear whether solutions exist.

Fortunately, another kernel is available. In 1991, Linus Torvalds developed a Unix-compatible kernel and called it Linux. It was proprietary at first, but in 1992, he made it free software; combining Linux with the not-quite-complete GNU system resulted in a complete free operating system. (Combining them was a substantial job in itself, of course.) It is due to Linux that we can actually run a version of the GNU system today.

Challenges in our future

We have proved our ability to develop a broad spectrum of free software. This does not mean we are invincible and unstoppable. Several challenges make the future of free software uncertain; meeting them will require steadfast effort and endurance, sometimes lasting for years. It will require the kind of determination that people display when they value their freedom and will not let anyone take it away.

The following four sections discuss these challenges.

Secret hardware

Hardware manufacturers increasingly tend to keep hardware specifications secret. This makes it difficult to write free drivers so that Linux and XFree86 can support new hardware. We have complete free systems today, but we will not have them tomorrow if we cannot support tomorrow"s computers.

There are two ways to cope with this problem. Programmers can do reverse engineering to figure out how to support the hardware. The rest of us can choose the hardware that is supported by free software; as our numbers increase, secrecy of specifications will become a self-defeating policy.

Reverse engineering is a big job; will we have programmers with sufficient determination to undertake it? Yes—if we have built up a strong feeling that free software is a matter of principle, and nonfree drivers are intolerable. And will large numbers of us spend extra money, or even a little extra time, so we can use free drivers? Yes, if the determination to have freedom is widespread.

(2008 note: this issue extends to the BIOS as well. There is a free BIOS, LibreBoot (a distribution of coreboot); the problem is getting specs for machines so that LibreBoot can support them without nonfree “blobs”.)

Nonfree libraries

A nonfree library that runs on free operating systems acts as a trap for free software developers. The library"s attractive features are the bait; if you use the library, you fall into the trap, because your program cannot usefully be part of a free operating system. (Strictly speaking, we could include your program, but it won"t run with the library missing.) Even worse, if a program that uses the proprietary library becomes popular, it can lure other unsuspecting programmers into the trap.

The first instance of this problem was the Motif toolkit, back in the 80s. Although there were as yet no free operating systems, it was clear what problem Motif would cause for them later on. The GNU Project responded in two ways: by asking individual free software projects to support the free X Toolkit widgets as well as Motif, and by asking for someone to write a free replacement for Motif. The job took many years; LessTif, developed by the Hungry Programmers, became powerful enough to support most Motif applications only in 1997.

Between 1996 and 1998, another nonfree GUI toolkit library, called Qt, was used in a substantial collection of free software, the desktop KDE .

Free GNU/Linux systems were unable to use KDE, because we could not use the library. However, some commercial distributors of GNU/Linux systems who were not strict about sticking with free software added KDE to their systems—producing a system with more capabilities, but less freedom. The KDE group was actively encouraging more programmers to use Qt, and millions of new “Linux users” had never been exposed to the idea that there was a problem in this. The situation appeared grim.

The free software community responded to the problem in two ways: GNOME and Harmony.

GNOME, the GNU Network Object Model Environment, is GNU"s desktop project. Started in 1997 by Miguel de Icaza, and developed with the support of Red Hat Software, GNOME set out to provide similar desktop facilities, but using free software exclusively. It has technical advantages as well, such as supporting a variety of languages, not just C++. But its main purpose was freedom: not to require the use of any nonfree software.

Harmony is a compatible replacement library, designed to make it possible to run KDE software without using Qt.

In November 1998, the developers of Qt announced a change of license which, when carried out, should make Qt free software. There is no way to be sure, but I think that this was partly due to the community"s firm response to the problem that Qt posed when it was nonfree. (The new license is inconvenient and inequitable, so it remains desirable to avoid using Qt.)

How will we respond to the next tempting nonfree library? Will the whole community understand the need to stay out of the trap? Or will many of us give up freedom for convenience, and produce a major problem? Our future depends on our philosophy.

Software patents

The worst threat we face comes from software patents, which can put algorithms and features off limits to free software for up to twenty years. The LZW compression algorithm patents were applied for in 1983, and we still cannot release free software to produce proper compressed GIF s. In 1998, a free program to produce MP3 compressed audio was removed from distribution under threat of a patent suit.

There are ways to cope with patents: we can search for evidence that a patent is invalid, and we can look for alternative ways to do a job. But each of these methods works only sometimes; when both fail, a patent may force all free software to lack some feature that users want. After a long wait, the patents expire (the MP3 patents are expected to have expired by 2018), but what will we do until then?

Those of us who value free software for freedom"s sake will stay with free software anyway. We will manage to get work done without the patented features. But those who value free software because they expect it to be technically superior are likely to call it a failure when a patent holds it back. Thus, while it is useful to talk about the practical effectiveness of the “bazaar” model of development, and the reliability and power of some free software, we must not stop there. We must talk about freedom and principle.

Free documentation

The biggest deficiency in our free operating systems is not in the software—it is the lack of good free manuals that we can include in our systems. Documentation is an essential part of any software package; when an important free software package does not come with a good free manual, that is a major gap. We have many such gaps today.

Free documentation, like free software, is a matter of freedom, not price. The criterion for a free manual is pretty much the same as for free software: it is a matter of giving all users certain freedoms. Redistribution (including commercial sale) must be permitted, online and on paper, so that the manual can accompany every copy of the program.

Permission for modification is crucial too. As a general rule, I don"t believe that it is essential for people to have permission to modify all sorts of articles and books. For example, I don"t think you or I are obliged to give permission to modify articles like this one, which describe our actions and our views.

But there is a particular reason why the freedom to modify is crucial for documentation for free software. When people exercise their right to modify the software, and add or change its features, if they are conscientious they will change the manual, too—so they can provide accurate and usable documentation with the modified program. A nonfree manual, which does not allow programmers to be conscientious and finish the job, does not fill our community"s needs.

Some kinds of limits on how modifications are done pose no problem. For example, requirements to preserve the original author"s copyright notice, the distribution terms, or the list of authors, are OK. It is also no problem to require modified versions to include notice that they were modified, even to have entire sections that may not be deleted or changed, as long as these sections deal with nontechnical topics. These kinds of restrictions are not a problem because they don"t stop the conscientious programmer from adapting the manual to fit the modified program. In other words, they don"t block the free software community from making full use of the manual.

However, it must be possible to modify all the technical content of the manual, and then distribute the result in all the usual media, through all the usual channels; otherwise, the restrictions do obstruct the community, the manual is not free, and we need another manual.

Will free software developers have the awareness and determination to produce a full spectrum of free manuals? Once again, our future depends on philosophy.

We must talk about freedom

Estimates today are that there are ten million users of GNU/Linux systems such as Debian GNU/Linux and Red Hat “Linux”. Free software has developed such practical advantages that users are flocking to it for purely practical reasons.

The good consequences of this are evident: more interest in developing free software, more customers for free software businesses, and more ability to encourage companies to develop commercial free software instead of proprietary software products.

But interest in the software is growing faster than awareness of the philosophy it is based on, and this leads to trouble. Our ability to meet the challenges and threats described above depends on the will to stand firm for freedom. To make sure our community has this will, we need to spread the idea to the new users as they come into the community.

But we are failing to do so: the efforts to attract new users into our community are far outstripping the efforts to teach them the civics of our community. We need to do both, and we need to keep the two efforts in balance.

“Open Source”

Teaching new users about freedom became more difficult in 1998, when a part of the community decided to stop using the term “free software” and say “open source software” instead.

Some who favored this term aimed to avoid the confusion of “free” with “gratis”—a valid goal. Others, however, aimed to set aside the spirit of principle that had motivated the free software movement and the GNU Project, and to appeal instead to executives and business users, many of whom hold an ideology that places profit above freedom, above community, above principle. Thus, the rhetoric of “open source” focuses on the potential to make high-quality, powerful software, but shuns the ideas of freedom, community, and principle.

The “Linux” magazines are a clear example of this—they are filled with advertisements for proprietary software that works with GNU/Linux. When the next Motif or Qt appears, will these magazines warn programmers to stay away from it, or will they run ads for it?

The support of business can contribute to the community in many ways; all else being equal, it is useful. But winning their support by speaking even less about freedom and principle can be disastrous; it makes the previous imbalance between outreach and civics education even worse.

“Free software” and “open source” describe the same category of software, more or less, but say different things about the software, and about values. The GNU Project continues to use the term “free software”, to express the idea that freedom, not just technology, is important.

Try!

Yoda"s aphorism (“There is no ‘try’”) sounds neat, but it doesn"t work for me. I have done most of my work while anxious about whether I could do the job, and unsure that it would be enough to achieve the goal if I did. But I tried anyway, because there was no one but me between the enemy and my city. Surprising myself, I have sometimes succeeded.

Sometimes I failed; some of my cities have fallen. Then I found another threatened city, and got ready for another battle. Over time, I"ve learned to look for threats and put myself between them and my city, calling on other hackers to come and join me.

Nowadays, often I"m not the only one. It is a relief and a joy when I see a regiment of hackers digging in to hold the line, and I realize, this city may survive—for now. But the dangers are greater each year, and now Microsoft has explicitly targeted our community. We can"t take the future of freedom for granted. Don"t take it for granted! If you want to keep your freedom, you must be prepared to defend it.

GNU General Public License (Универсальная общедоступная лицензия GNU или Открытое лицензионное соглашение GNU) - возможно, наиболее популярная лицензия на свободное программное обеспечение, созданная в рамках проекта GNU в 1988 г. Её также сокращённо называют GNU GPL или даже просто GPL, если из контекста понятно, что речь идёт именно о данной лицензии (существует довольно много других лицензий, содержащих слова «general public license» в названии). Вторая версия этой лицензии была выпущена в 1991 году, третья версия, после многолетней работы и длительной дискуссии - в 2007 году. GNU Lesser General Public License (LGPL) - это ослабленная версия GPL, предназначенная для некоторых библиотек ПО. GNU Affero General Public License - это усиленная версия GPL для программ, предназначенных для доступа к ним через сеть.

Цель GNU GPL - предоставить пользователю права копировать, модифицировать и распространять (в том числе на коммерческой основе) программы (что по умолчанию запрещено законом об авторских правах), а также гарантировать, что и пользователи всех производных программ получат вышеперечисленные права. Принцип «наследования» прав называется «копилефт» (транслитерация английского «copyleft») и был придуман Ричардом Столлмэном. По контрасту с GPL, лицензии собственнического ПО очень редко дают пользователю такие права и обычно, наоборот, стремятся их ограничить, например, запрещая восстановление исходного кода.

GPL предоставляет получателям компьютерных программ следующие права, или «свободы»:

* свободу запуска программы, с любой целью;
* свободу изучения того, как программа работает, и её модификации (предварительным условием для этого является доступ к исходному коду);
* свободу распространения копий;
* свободу улучшения программы, и выпуска улучшений в публичный доступ (предварительным условием для этого является доступ к исходному коду).
источник

GNU OS

GNU - рекурсивный акроним от англ. GNU’s Not UNIX - «GNU - не Unix!») - это свободная UNIX-подобная операционная система, разрабатываемая Проектом GNU.

Разработка системы GNU началась 27 сентября 1983 года, когда Ричард Столлмэн опубликовал объявление о проекте в группах новостей net.unix-wizards и net.usoft. 5 января 1984 года Столлмэн уволился из Массачуссетского технологического института с целью посвятить своё время написанию свободной операционной системы, а также для того, чтобы институт не мог претендовать на какие-либо права на исходный код системы. Первой программой GNU стал текстовый редактор Emacs.

В настоящее время система GNU/Linux, более широко известная как просто Linux, достаточно распространена (особенно на рынке серверов) и является вполне завершённой. Она состоит из большого количества программ проекта GNU (в первую очередь системных утилит и GNU toolchain), ядра Linux - части системы, отвечающей за выполнение других программ, включающей драйверы устройств и т. п., - и множества других свободных программ.

С аббревиатурами, вынесенными в заголовок, наверняка столкнется любой пользователь, начавший постигать мир UNIX-подобных операционных систем и свободного программного обеспечения.

GNU расшифровывается как "GNU is not UNIX" и обозначает масштабный проект, в рамках которого разрабатываются различные системные библиотеки и приложения. Всё, что создано в рамках этого проекта, имеет открытый исходный код (open source). Это значит, что любой человек, обладающими должными знаниями в программировании, может взять этот код за основу собственных разработок, обладая полным правом изменять и распространять его.

Разработанные в рамках проекта программные продукты, дополненные системным ядром GNU Hard, легли в основу полноценной операционной системы, которая также обозначалась термином GNU. Но её создание, которое берет начало в 1990-м году, не закончено до настоящего времени. Зато в 1991 году появилось детище Линуса Торвальдса – ядро Linux. И вот тут-то проект GNU сыграл огромную роль в развитии Linux в качестве операционной системы. Ведь система – это не только ядро, а цельная совокупность системного программного обеспечения, включающего в себя библиотеки, утилиты, драйвера и многое другое. И именно наработки участников GNU, которые были использованы совместно с ядром Linux, явили миру тот самый продукт, который сейчас успешно конкурирует с Windows и MacOS. И называется он «GNU/Linux», причем первая часть чаще всего отбрасывается, что, в общем случае, неправильно.

Помимо программного обеспечения в рамках проекта GNU была создана лицензия General Public License (GNU GPL), которая стала основной в мире open source и получила широкое применение. Она регламентирует распространение свободного программного обеспечения и является крайне демократичной. Она гласит, что любой пользователь имеет право изменять, распространять и использовать в своих проектах исходный код приложений, отмеченных этой лицензией. При этом на все дочерние программы также будет распространяться действие GPL. То есть разработчик, использующий открытый код, также производит открытый код, а сама лицензия таким образом наследуется. Это является обязательным правилом, но существуют способы, позволяющие обойти GPL и закрыть собственные коды на базе использованных открытых.

GNU и созданная в его рамках GPL оказали серьезное влияние на индустрию высоких технологий. Свободное программное обеспечение привлекло в свою отрасль огромное количество талантливых программистов, которые составили крупнейшее сообщество. Созданные под GPL продукты не только получили широкое практическое применение, но и стали, благодаря качественному и доступному коду, отличной учебной площадкой для миллионов начинающих разработчиков. Концепция такого обмена информацией и самая громкая альтернатива привычным авторским правам, хотя это и неочевидно, сделала возможным развитие программного обеспечения и в данный момент набирает всё большие обороты.

ОСНОВНЫЕ СТАНДАРТЫ

UNIX"ы, поставляемые производителями компьютеров

Машина Операционная система "Оригинал"
Sun 1,2,10, ... SunOS 4.1.2 BSD 4.3
Sun 10,20,1000 SunOS 5.5 SVR4.0
IBM RS/6000 AIX SV 3.2
HP Apollo 900 HP/UX 10 BSD 4.2 & SV 3.2
Sequent Dynix SV 4.0
Motorola 922 SVR4/88 SVR4.0
Беста-88 Bestix SV 3.1
DEC Ultrix BSD 4.2
DEC Alpha AXP OSF/1 BSD 4.3
SGCS Silicon Graphic IRIX 6.0

Выбирая платформу, мы автоматически получаем с ней "ее собственный" UNIX. Пожалуй, с точки зрения удобства и цельности пользовательского и администраторского окружения самый приятный из них - AIX. А самый распространенный - Solaris 2.5 (естественно).

Именно появление коммерческих реализаций Unix привело к тому, что разразились так называемые Unix-войны. Каждая из фирм в стремлении добиться превосходства на рынке включала в свою систему какие-то особенности, собственные доработки и усовершенствования, иногда даже с прямой целью обособить свою систему от других, представленных на рынке. Фирмы-разработчики в своих усилиях добиться преимущества над конкурентами вносили изменения даже в интерфейс прикладного программирования (API - Applications Programmer"s Interface), - спецификацию набора функций, которую должны выдержать разработчики программного обеспечения для совместимости своих программ с операционной системой. Это еще больше усиливало несовместимость разных версий Unix и приводило к несовместимости программного обеспечения, разработанного разными (в том числе независимыми) поставщиками.

Но гораздо худшим следствием войн между разными версиями Unix было то, что прекратился свободный обмен исходными кодами, который так способствовал быстрому совершенствованию Unix на ранних этапах ее развития. Не зная другой модели извлечения прибыли из программного обеспечения, кроме сохранения его в тайне и полного контроля над разработкой коммерческого продукта, AT&T жестко запрещала распространение исходных кодов. Угроза подвергнуться юридическому преследованию за незаконное распространение магнитных лент с Unix мало кого привлекала. Поток новых идей из университетов иссяк.

Чтобы преодолеть эту проблему были предприняты несколько попыток стандартизации Unix.

Первые серьезные усилия по стандартизации версий API (программного интерфейса), разработанных для System V и Berkeley, были предприняты в 1983 году инициативной группой под названием /usr/group. Однако с ростом числа версий операционной системы эффективность стандарта уменьшилась, и через год, в 1985 году был создан стандарт POSIX (Portable Operating System Interface for Computing Environment – переносимый интерфейс операционной системы для вычислительной среды).



В 1988 г. был разработан стандарт POSIX 1003.1-1988, который определил программный интерфейс приложений. Этот стандарт нашел широкое применение во многих ОС, в том числе, с архитектурой, отличной от UNIX. Спустя два года стандарт был принят как стандарт IEEE (Institute of Electrical and Electronic Engineers, существующее еще) IEEE 1003.1-1990. Стандарт определяет только интерфейс, а е конкретную организацию, поэтому он не делает различий между системными вызовами и библиотечными функциями, называя все элементы программного интерфейса просто функциями.

Все более поздние стандарты Unix включают в свой состав POSIX, и все последующие версии Unix придерживаются этого стандарта. Единственное большое дополнение, которое позже появилось в ядре Unix, были сокеты, пришедшие из BSD.

Некоммерческая организация - консорциум X/Open (позже Open Group), созданный в 1984 г. рядом европейских компаний взял на себя разработку общего набора интерфейсов операционной системы, согласованного между различными производителями, и создание действительно открытых систем, для которых стоимость переносимости приложений была бы минимальной.

В 1992 году появился документ, известный под названием X/OpenPortability Guide версии 3 (XPG3), который включал POSIX 1003.1-1988 и стандарт на графическую систему X Windows System, разработанную в Массачусетском технологическом институте (США). В 1994 г. – XPG4.2.

В 1996 г. объединение X/Open и OSF привело к созданию консорциума The Open Group, продолжившего разработки в области открытых систем, например, дальнейшая разработка пользовательского интерфейса Common Desktop Environment, интерфейсы для распределенной вычислительной среды Distributed Computing Environment – DCE и др.

(American National Standarts Institute)

В 1989 году Американским национальным институтом стандартов был утвержден стандарт X3.159-1989 языка программирования Си. Стандарт определяет синтаксис, семантику и содержание стандартной библиотеки.

GNU - это объединение разработчиков, которые создают бесплатные программы самого разного плана.

GNU - это проект, создавший много бесплатных программ в рамках стратегии открытого кода.

При этом программы эти умеют делать все - от работы с файлами до обработки текстов, а компилятор gcc (GNU С) является одним из самых надежных и эффективных компиляторов для UNIX. Так обеспечивается возможность оснастить почти любую UNIX-подобную ОС бесплатным программным обеспечением.

Что такое GNU/Linux?

Поскольку Linux - всего лишь ядро, подобное оснащение просто необходимо. Ядро отвечает за работу с памятью, дисками, внутренними устройствами, но оно, например, не имеет редактора текста. Зато умеет запускать другие программы. Поэтому дополнение бесплатного ядра набором бесплатных программ выглядит весьма естественно. В результате возникает тандем GNU/Linux.

"Аббревиатура GNU расшифровывается как "GNU - это не UNIX" (GNU - Not UNIX). Основная идея, заложенная в процесс разработки системы GNU - это ее полное отличие от UNIX. UNIX всегда была и остается несвободным ПО, то есть она лишает своих пользователей свободы сотрудничества, а также контроля над своими компьютерами. Для того, чтобы стать сообществом, свободно пользующимся своими компьютерами, нам нужна была свободная операционная система. У нас не было достаточной суммы, чтобы выкупить и сделать свободной какую-либо из существовавших систем, но у нас было достаточно знаний и умений, чтобы создать новую. Создание GNU было грандиозной работой. Мы сделали ее во имя нашей свободы, и вашей тоже."

В 1985 году Р.Столлман написал свой знаменитый Манифест GNU (он был опубликован в мартовском номере журнала "Dr. Dobb"s Journal" за 1985 год) и основал Free Software Foundation (FSF) - благотворительный фонд для разработки свободно распространяемого ПО. Фонд взял на себя распространение лент с Emacs; позже он стал поставлять и другие свободно распространяемые программы (созданные как в рамках Проекта GNU, так и вне его), а также продавать руководства к ним. Это давало средства для разработки проекта GNU. FSF принимал пожертвования, но большая часть доходов всегда поступала от продаж копий свободно распространяемого ПО и связанных с ним услуг.

Разработка свободно распространяемого ПО была очень важным шагом, но еще большей заслугой Р.Столлмана следует признать создание Стандартной Общественной Лицензии GNU (GNU General Public License, или GPL). На русский язык это название разные авторы переводят по разному - Универсальная общественная лицензия, Обобщенная Публичная Лицензия и т.п. Но считается, что юридическую силу имеет только английский вариант этой лицензии . Основная идея GPL состоит в том, что пользователь должен обладать следующими четырьмя правами (или четырьмя свободами):

· Правом запускать программу для любых целей (свобода 0)

· Правом изучать устройство программы и приспосабливать ее к своим потребностям (свобода 1), что предполагает доступ к исходному коду программы.

· Правом распространять программу, имея возможность помочь другим (свобода 2).

· Правом улучшать программу и публиковать улучшения, в пользу всего сообщества (свобода 3), что тоже предполагает доступ к исходному коду программы.

Программное обеспечение, распространяемое под этой лицензией, можно как угодно использовать, копировать, дорабатывать, модифицировать, передавать или продавать модифицированные (или немодифицированные) версии другим лицам при условии, что результат такой переработки тоже будет распространяться под лицензией GPL. Последнее условие - самое важное и определяющее в этой лицензии. Оно гарантирует, что результаты усилий разработчиков свободного ПО останутся открытыми и не станут частью какого-либо лицензированного обычным способом продукта. Оно также отличает свободное ПО от ПО, распространяемого бесплатно. Одно из требований этой лицензии состоит в том, что продавая ПО под лицензией GPL, вы должны предоставить исходные коды этого ПО каждому, кто захочет получить к ним доступ. Говоря словами создателей FSF, лицензия GPL "делает ПО свободным и гарантирует, что оно останется свободным".

Главная цель, которую преследует GPL, - защитить свободное программное обеспечение от "приватизации". Но нужно заметить, что она сконструирована таким образом, чтобы разрешить все "честные" способы заработка денег на свободных программах, Это очень существенный момент, на который необходимо обратить особое внимание. При первом знакомстве с GPL может сложиться ошибочное представление о том, что эта лицензия вообще запрещает какие-либо способы заработать на программном обеспечении или его разработке. На самом деле GPL в частности и FSF вообще прямо поощряют бизнес, связанный с оказанием сопутствующих услуг, - обучение, консультации, и коммерческое тиражирование ПО. Это позволяет привлечь к сотрудничеству и корпорации и людей, для которых материальный интерес важнее моральных стимулов.