GNU arch

Last updated
GNU arch
Original author(s) Thomas Lord
Developer(s) Andy Tai
Final release
1.3.5 / July 20, 2006;18 years ago (2006-07-20)
Written in C
Operating system Linux, Windows, Mac OS X
Type Revision control
License GPL
Website www.gnu.org/software/gnu-arch/

GNU arch software is a distributed revision control system that is part of the GNU Project and licensed under the GNU General Public License. It is used to keep track of the changes made to a source tree and to help programmers combine and otherwise manipulate changes made by multiple people or at different times.

Contents

As of 2009, GNU arch's official status is deprecation, and only security fixes are applied. [1] Bazaar (or 'bzr') has since also been made an official GNU project and can thus be considered the replacement for GNU arch. It is not a fork of arch. [2]

Features

Being a distributed, decentralized versioning system, each revision stored using arch is uniquely globally identifiable; such identifier can be used in a distributed setting to easily merge or "cherry-pick" changes from completely disparate sources.

Being decentralized means that there is no need for a central server for which developers have to be authorized in order to contribute. As with other systems, a full read-only copy of a project is made accessible in an "official" repository via HTTP, FTP, or SFTP; but then, contributors are encouraged to make modifications and publish them in a public archive (repository) of their own, so that the head developer may manually merge changesets into the official repository.

To simulate the behavior of centralized revision control systems, the head developer could allow shell access (SSH) or write access (FTP, SFTP, WebDAV) to a server, allowing authorized users to commit to a central server. More often, GNU arch-managed projects have a lead benevolent dictator that merges changes from contributors.

GNU arch has several other features:

Atomic commits
Commits are all-or-nothing. The tree must be in proper condition before the commit begins, and commits are not visible to the world until complete. If the commit is interrupted before this, it remains invisible and must be rolled back before the next commit. This avoids corruption of the archive and other users' checked-out copies.
Changeset oriented
Instead of tracking individual files (as in CVS), GNU arch tracks changesets, which are akin to patches. Each changeset is a description of the difference between one source tree and another, and so a changeset can be used to produce one revision from another revision. Authors are encouraged to use one commit per feature or bugfix.
Easy branching
Branching is efficient and can span archives. A branch (or 'tag') simply declares the ancestor revision, and development continues from there.
Advanced merging
Due to the permanent record of all ancestors and merged revisions, merging can take into account which branch contains which patch, and can do three-way merging based on a shared ancestor revision.
Cryptographic signatures
Every changeset is stored with a hash to prevent accidental corruption. Using an external file signing program (such as GnuPG or another PGP client), these hashes can also optionally be signed, preventing unauthorized modification if the archive is compromised.
Renaming
All files and directories can be easily renamed. These are tracked by a unique ID rather than by name, so history is preserved, and patches to files are properly merged even if filenames differ across branches.
Metadata tracking
The permissions of all files are tracked. Symbolic links are supported and are tracked the same way as files and directories.

History and maintainership

GNU arch version 1 and tla

The original author and maintainer of GNU arch was Thomas Lord who started the project in 2001. The command used to manipulate GNU arch repositories is tla, an initialism for Tom Lord's Arch. Lord started GNU arch as a collection of shell scripts to provide an alternative to CVS. [3] In 2003, arch became part of the GNU project. [4]

The GNU arch project forked several times, resulting in both Canonical Ltd.'s now abandoned Baz fork and Walter Landry's ArX project. Both forks provoked a hostile reaction: the ArX fork was due to a serious dispute in direction and Lord was strongly critical of Canonical's approach to announcing the Baz project. [5]

In August 2005 Lord announced that he was resigning as the maintainer of GNU arch and recommended that Baz become the main GNU arch project. [6] However, this did not happen: the Baz fork was abandoned by Canonical in favour of the separate Bazaar project, [7] [8] with the 1.5 release of Baz being scrapped in 2006. [9] In October, 2005, Andy Tai announced that Lord and the Free Software Foundation had accepted his offer to be the maintainer of GNU arch. [10] Tai subsequently merged many features from Baz back into tla, [9] but in March 2008 indicated that tla was no longer under active development and was no longer competitive with other version control systems. [1]

revc

revc was a prototype revision control project by Thomas Lord that he intended to become GNU arch 2.0, designed to be a radical departure from tla and to draw many ideas from the Git revision control system. [11] It was announced in June 2005, [11] the first pre-release was in July [12] and the last in August, just prior to Lord's resignation as maintainer. [13] revc only had 10 core commands and Lord intended to eliminate restrictive namespaces, complicated file naming conventions and increase the speed. [12]

As of 2008 the last pre-release, 0.0x2, of revc is still available [14] and Lord was still interested in some of the ideas in GNU arch but did not have the resources to resume development of revc. [15] Thomas Lord died in June 2022. [16]

Criticism

Perhaps the most common criticism of GNU arch is that it is difficult to learn, even for users who have experience with other SCM systems. In particular, GNU arch has a large number of commands, which can be intimidating for new users and some design elements arguably too strongly enforce Lord's taste in version control practices. [17] [18]

Some also criticize GNU arch for using very unusual file naming conventions ("FunkyFileNames" at the Wayback Machine (archived August 8, 2007)), which can create difficulties for using it in scripts, some shells, and in porting it to non-Unix operating systems. GNU arch has been criticised for having a slow running time as part of a design decision to lessen internal code complexity. [19]

See also

Related Research Articles

Version control is the software engineering practice of controlling, organizing, and tracking different versions in history of computer files; primarily source code text files, but generally any type of file.

Revision Control System (RCS) is an early implementation of a version control system (VCS). It is a set of UNIX commands that allow multiple users to develop and maintain program code or documents. With RCS, users can make their own revisions of a document, commit changes, and merge them. RCS was originally developed for programs but is also useful for text documents or configuration files that are frequently revised.

<span class="mw-page-title-main">Apache Subversion</span> Free and open-source software versioning and revision control system

Apache Subversion is a version control system distributed as open source under the Apache License. Software developers use Subversion to maintain current and historical versions of files such as source code, web pages, and documentation. Its goal is to be a mostly compatible successor to the widely used Concurrent Versions System (CVS).

<span class="mw-page-title-main">Code Co-op</span> Peer-to-peer revision control system

Code Co-op is the peer-to-peer revision control system made by Reliable Software.

In software engineering, a project fork happens when developers take a copy of source code from one software package and start independent development on it, creating a distinct and separate piece of software. The term often implies not merely a development branch, but also a split in the developer community; as such, it is a form of schism. Grounds for forking are varying user preferences and stagnated or discontinued development of the original software.

<span class="mw-page-title-main">Monotone (software)</span> Revision control software

Monotone is an open source software tool for distributed revision control. It tracks revisions to files, groups sets of revisions into changesets, and tracks history across renames. The focus of the project is on integrity over performance. Monotone is designed for distributed operation, and makes heavy use of cryptographic primitives to track file revisions and to authenticate user actions.

<span class="mw-page-title-main">Git</span> Distributed version control software system

Git is a distributed version control system that tracks versions of files. It is often used to control source code by programmers who are developing software collaboratively.

In software development, distributed version control is a form of version control in which the complete codebase, including its full history, is mirrored on every developer's computer. Compared to centralized version control, this enables automatic management branching and merging, speeds up most operations, improves the ability to work offline, and does not rely on a single location for backups. Git, the world's most popular version control system, is a distributed version control system.

<span class="mw-page-title-main">Darcs</span> Distributed version control system

Darcs is a distributed version control system created by David Roundy. Key features include the ability to choose which changes to accept from other repositories, interaction with either other local (on-disk) repositories or remote repositories via SSH, HTTP, or email, and an unusually interactive interface. The developers also emphasize the use of advanced software tools for verifying correctness: the expressive type system of the functional programming language Haskell enforces some properties, and randomized testing via QuickCheck verifies many others. The name is a recursive acronym for Darcs Advanced Revision Control System.

A source-code-hosting facility is a file archive and web hosting facility for source code of software, documentation, web pages, and other works, accessible either publicly or privately. They are often used by open-source software projects and other multi-developer projects to maintain revision and version history, or version control. Many repositories provide a bug tracking system, and offer release management, mailing lists, and wiki-based project documentation. Software authors generally retain their copyright when software is posted to a code hosting facilities.

<span class="mw-page-title-main">Mercurial</span> Distributed revision-control tool for software developers

Mercurial is a distributed revision control tool for software developers. It is supported on Microsoft Windows, Linux, and other Unix-like systems, such as FreeBSD and macOS.

Branching, in version control and software configuration management, is the duplication of an object under version control. Each object can thereafter be modified separately and in parallel so that the objects become different. In this context the objects are called branches. The users of the version control system can branch any branch.

The following tables describe attributes of notable version control and software configuration management (SCM) software systems that can be used to compare and contrast the various systems.

<span class="mw-page-title-main">GNU Bazaar</span> Version control system

GNU Bazaar is a distributed and client–server revision control system sponsored by Canonical.

In version control software, a changeset is a set of alterations packaged together, along with meta-information about the alterations. A changeset describes the exact differences between two successive versions in the version control system's repository of changes. Changesets are typically treated as an atomic unit, an indivisible set, by version control systems. This is one synchronization model.

awesome (window manager) Window manager for X Window System

awesome is a dynamic window manager for the X Window System developed in the C and Lua programming languages. Lua is also used for configuring and extending the window manager. Its development began as a fork of dwm, though has differed considerably since. It aims to be extremely small and fast, yet extensively customizable. It makes it possible for the user to manage windows with the use of keyboard.

Unity Version Control is a cross-platform commercial distributed version control tool developed by Códice Software for Microsoft Windows, Mac OS X, Linux, and other operating systems. It includes a command-line tool, native GUIs, diff and merge tool and integration with a number of IDEs. It is a full version control stack not based on Git.

<span class="mw-page-title-main">Chakra (operating system)</span> Linux distribution

Chakra was a Linux distribution originally based on Arch Linux and focused on KDE software, intending to provide a KDE/Qt minimizing use of other widget toolkits where possible. It was well received by critics during its existence.

<span class="mw-page-title-main">Magit</span> Emacs interface for the Git version control system

Magit is an interface to the Git version control system, available as a GNU Emacs package written in Emacs Lisp. It is available through the MELPA package repository, on which it is the most-downloaded non-library package, with over 4.3 million downloads as of September 2024.

References

  1. 1 2 Tai, Andy (2008-03-28). "Re: revc". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  2. "History of Bazaar". Archived from the original on 26 February 2009. Retrieved 20 May 2014.
  3. Moffit, Nick (2004-11-01). "Revision Control with Arch: Introduction to Arch". Linux Journal . Retrieved 2008-06-18.
  4. Lord, Tom (2003-07-13). "GNU, doc foo, short-term plans, hacking suggestions, money". arch-users (Mailing list). Retrieved 2008-06-18.[ permanent dead link ]
  5. Lord, Thomas (2004-10-31). "community spirit". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  6. Lord, Thomas (2005-08-15). "GNU Arch maintainership". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  7. "Baz1x - Bazaar Version Control". 2006-07-24. Archived from the original on 2008-01-07. Retrieved 2008-01-17.
  8. Arbash Meinel, John; Aaron Bentley; Martin Pool; Mark Shuttleworth (2006-07-26). "HistoryOfBazaar". Archived from the original on 2009-02-26. Retrieved 2008-02-20.
  9. 1 2 Collins, Robert (2006-06-30). "releasing 1.5". bazaar-old (Mailing list). Archived from the original on 2011-05-12. Retrieved 2007-06-16.
  10. Tai, Andy (2005-10-27). "Re: Good News about GNU Arch!". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  11. 1 2 Lord, Thomas (2005-06-20). "arch 2.0 code base in progress". gnu-arch-dev (Mailing list). Retrieved 2008-06-17.[ permanent dead link ]
  12. 1 2 Lord, Thomas (2005-07-08). "GNU Arch 2.0 -- first source". gnu-arch-dev (Mailing list). Archived from the original on 2011-05-17. Retrieved 2008-06-17.
  13. Lord, Thomas (2005-08-01). "Arch 2.0 release (revc.0.0x2)". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  14. Wandrebeck, Laurent (2008-03-26). "revc". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  15. Lord, Thomas (2008-03-28). "Re: revc". gnu-arch-users (Mailing list). Retrieved 2008-06-17.
  16. Thomas Lord 1966-2022, 2022-06-26
  17. Pool, Martin (2004-06-21). "What's wrong with Arch?". Archived from the original on 2012-07-14. Retrieved 2008-06-18.
  18. Pool, Martin (2004-09-26). "Tom Lord interview, and related things". Archived from the original on 2012-07-13. Retrieved 2008-06-18. Earlier versions were very much bound into projects being run the way Tom wanted them: wierd [sic] file conventions, only committing from clean trees, and so on
  19. Weimer, Florian (2004-06-09). "Some Issues with GNU arch" . Retrieved 2008-06-18.