Monotone (software)
Encyclopedia
Monotone is an open source
Open source
The term open source describes practices in production and development that promote access to the end product's source materials. Some consider open source a philosophy, others consider it a pragmatic methodology...

 software tool for distributed revision control
Distributed revision control
A distributed revision control system , distributed version control or decentralized version control keeps track of software revisions and allows many developers to work on a given project without necessarily being connected to a common network.-Distributed vs...

. Monotone 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 primitive
Cryptographic primitive
Cryptographic primitives are well-established, low-level cryptographic algorithms that are frequently used to build computer security systems. These routines include, but are not limited to, one-way hash functions and encryption functions.- Rationale :...

s to track file revisions (via the SHA-1 secure hash
Cryptographic hash function
A cryptographic hash function is a deterministic procedure that takes an arbitrary block of data and returns a fixed-size bit string, the hash value, such that an accidental or intentional change to the data will change the hash value...

) and to authenticate user actions (via RSA cryptographic signatures
Digital signature
A digital signature or digital signature scheme is a mathematical scheme for demonstrating the authenticity of a digital message or document. A valid digital signature gives a recipient reason to believe that the message was created by a known sender, and that it was not altered in transit...

).

Design

Like GNU arch
GNU arch
In computing, GNU arch is a distributed revision control system that is part of the GNU Project and licensed under the GNU General Public License...

, and unlike Subversion, Monotone takes a distributed approach to version control. Monotone uses SHA-1 hashes to identify specific files or groups of files, as with Git
Git (software)
Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...

 and Mercurial
Mercurial (software)
Mercurial is a cross-platform, distributed revision control tool for software developers. It is mainly implemented using the Python programming language, but includes a binary diff implementation written in C. It is supported on Windows and Unix-like systems, such as FreeBSD, Mac OS X and Linux...

, in place of linear revision numbers. Each participant maintains their own revision history, stored in a local SQLite
SQLite
SQLite is an ACID-compliant embedded relational database management system contained in a relatively small C programming library. The source code for SQLite is in the public domain and implements most of the SQL standard...

 database.

Integrity

Prior to some heavy optimisation in revision 0.27, Monotone's emphasis on correctness over optimisation was often blamed for poor initial experiences. The first action of a new user is often to synchronize (clone) a large existing Monotone database, an action which often took hours for large databases, due to the extensive validation and integrity checking which Monotone performs when revisions are moved through the network. Once the initial (clone) database is populated, subsequent actions usually proceed more rapidly. , there is still room for further optimisation on some rarer functions.

Workflow

Monotone is especially strong in its support for a diverge/merge workflow, which it achieves in part by always allowing commit before merge.

Networking

Although Monotone originally supported a variety of networking protocols for synchronizing trees, it now exclusively uses a custom protocol called netsync, which is more robust and efficient, and shares some conceptual ground with rsync
Rsync
rsync is a software application and network protocol for Unix-like and Windows systems which synchronizes files and directories from one location to another while minimizing data transfer using delta encoding when appropriate. An important feature of rsync not found in most similar...

 and cvsup
CVSup
CVSup is a computer program written for Unix/Linux based systems that synchronizes files and directories from one location to another while minimizing data transfer using file-type specific delta encoding when appropriate...

. (However, as of version 0.27, it is possible to use the netsync protocol over any stream, notably including ssh connections.) Netsync has its own IANA
Internet Assigned Numbers Authority
The Internet Assigned Numbers Authority is the entity that oversees global IP address allocation, autonomous system number allocation, root zone management in the Domain Name System , media types, and other Internet Protocol-related symbols and numbers...

-assigned port (4691) and older versions of it are supported by a Wireshark
Wireshark
Wireshark is a free and open-source packet analyzer. It is used for network troubleshooting, analysis, software and communications protocol development, and education...

 plug-in for traffic analysis. There is no separate Monotone server because any Monotone client can act as a server.

Other features

Other features of Monotone include:
  • Good support for internationalization and localization
    Internationalization and localization
    In computing, internationalization and localization are means of adapting computer software to different languages, regional differences and technical requirements of a target market...

  • Portable design, implemented in C++
    C++
    C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...

  • Monotone can import CVS
    Concurrent Versions System
    The Concurrent Versions System , also known as the Concurrent Versioning System, is a client-server free software revision control system in the field of software development. Version control system software keeps track of all work and all changes in a set of files, and allows several developers ...

     projects.
  • Signing
    Digital signature
    A digital signature or digital signature scheme is a mathematical scheme for demonstrating the authenticity of a digital message or document. A valid digital signature gives a recipient reason to believe that the message was created by a known sender, and that it was not altered in transit...

     of revisions using RSA certificates
  • Easy to learn, due to a command set similar to that of CVS
    Concurrent Versions System
    The Concurrent Versions System , also known as the Concurrent Versioning System, is a client-server free software revision control system in the field of software development. Version control system software keeps track of all work and all changes in a set of files, and allows several developers ...

  • Good documentation

Drawbacks

, possible drawbacks of Monotone include:
  • Potential users cannot checkout (or commit) from behind a proxy (very common in corporate environments) due to non-http protocol.
  • Less popular than competing open source DVCS such as Bazaar, Git
    Git (software)
    Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...

     or Mercurial
    Mercurial (software)
    Mercurial is a cross-platform, distributed revision control tool for software developers. It is mainly implemented using the Python programming language, but includes a binary diff implementation written in C. It is supported on Windows and Unix-like systems, such as FreeBSD, Mac OS X and Linux...

  • Performance issues for certain operations (most noticeable initial pull)
  • A lack of stable graphical user interface
    Graphical user interface
    In computing, a graphical user interface is a type of user interface that allows users to interact with electronic devices with images rather than text commands. GUIs can be used in computers, hand-held devices such as MP3 players, portable media players or gaming devices, household appliances and...

    s. Some are underway, however, including TracMtn, a Trac
    Trac
    Trac is an open source, web-based project management and bug-tracking tool. The program is inspired by CVSTrac, and was originally named svntrac due to its ability to interface with Subversion. It is developed and maintained by Edgewall Software....

     plugin for history and repository browsing, and guitone, a Qt
    Qt (toolkit)
    Qt is a cross-platform application framework that is widely used for developing application software with a graphical user interface , and also used for developing non-GUI programs such as command-line tools and consoles for servers...

    -frontend to manage workspaces and databases.

Milestones

Monotone version 0.26 introduced major changes to the internal database structures, including a new structure known by Monotone developers as a roster. Monotone databases created with version 0.26 can not exchange revisions with older Monotone databases. Older databases must first be upgraded to the new format. The new netsync protocol is incompatible with earlier versions of Monotone.

Implementation

Monotone is implemented in modern-dialect C++ on top of the Boost library
Boost library
Boost is a set of free software libraries that extend the functionality of C++.-Overview:Most of the Boost libraries are licensed under the Boost Software License, designed to allow Boost to be used with both free and proprietary software projects...

, the Botan
Botan (programming library)
Botan is a BSD-licensed cryptographic library written in C++.It provides a wide variety of cryptographic algorithms, formats, and protocols. It is used in the Monotone distributed revision control program....

 cryptography library, and the SQLite
SQLite
SQLite is an ACID-compliant embedded relational database management system contained in a relatively small C programming library. The source code for SQLite is in the public domain and implements most of the SQL standard...

 database library. Monotone supports customization and extension via hook functions written in the Lua programming language
Lua programming language
Lua is a lightweight multi-paradigm programming language designed as a scripting language with extensible semantics as a primary goal. Lua has a relatively simple C API compared to other scripting languages.- History :...

. The monotone build process is automated with BuildBot
BuildBot
BuildBot is a software development continuous integration tool which automates the compile/test cycle required to validate changes to the project code base...

 and includes extensive regression tests
Regression testing
Regression testing is any type of software testing that seeks to uncover new errors, or regressions, in existing functionality after changes have been made to a system, such as functional enhancements, patches or configuration changes....

.

Monotone as Git inspiration

In April 2005, Monotone became the subject of increased interest in the FLOSS
Floss
Floss may refer to:* Dental floss, used to clean teeth* Embroidery thread, machine or hand-spun yarn for embroidery* Fairy floss or candyfloss, alternative names for cotton candy* Rousong, i.e. meat floss-Computing:...

 community
Free software community
The free-software community is an informal term that refers to the users and developers of free software as well as supporters of the free-software movement. The movement is sometimes referred to as the open-source software community or a subset thereof...

 after Linus Torvalds
Linus Torvalds
Linus Benedict Torvalds is a Finnish software engineer and hacker, best known for having initiated the development of the open source Linux kernel. He later became the chief architect of the Linux kernel, and now acts as the project's coordinator...

 mentioned it as a possible replacement for BitKeeper
BitKeeper
BitKeeper is a software tool for distributed revision control of computer source code. A distributed system, BitKeeper competes largely against other systems such as Git and Mercurial...

 in the Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...

 development process. In a post on the Linux kernel mailing list
Linux kernel mailing list
The Linux kernel mailing list is the main electronic mailing list for Linux kernel development, where the majority of the announcements, discussions, debates, and flame wars over the kernel take place. Many other mailing lists exist to discuss the different subsystems and ports of the Linux...

, Torvalds praised Monotone and disparaged Subversion (and by extension, all client-server version-control systems):
Instead of adopting Monotone, Torvalds decided to write his own SCM system, Git
Git (software)
Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...

. Git's design uses some ideas from Monotone, but the two projects do not share any core source code. Git has a much stronger focus on high performance, inspired by the lengthy history and demanding distributed modes of collaboration used by Torvalds and the other Linux kernel authors.

A key issue debated was whether the replacement of BitKeeper should support cherry picking, whereby a tree maintainer can approve a subset of patches while rejecting others on an individual basis. Torvalds argued that this approach "results in the wrong dynamics and psychology in the system" by shifting burden to the upstream maintainers
Software maintenance
Software Maintenance in software engineering is the modification of a software product after delivery to correct faults, to improve performance or other attributes....

 rather than forcing downstream
Downstream (computer science)
In a telecommunications network or computer network, downstream refers to data sent from a network service provider to a customer.Although the best voiceband modems are called 56 kbit/s modems, downstream speeds can be limited to a few tens of kilobits per second with even lower upstream speeds...

 maintainers to put more effort into keeping their trees free from garbage. He further argued that Monotone is correct in its aversion to cherry-picking as a feature, but then failed to take it far enough by not making it easy enough to "throw away" unclean working trees after their purpose is served. Torvalds also noted his perception that Monotone at that time had not achieved the performance level required by a project as large as Linux kernel development.

This argument runs contrary to the perception among many software developers that cherry picking is an advanced feature that an SCM tool should strive to support. Other SCM tools, such as Darcs
Darcs
Darcs is a distributed revision control system created by David Roundy; it was designed to replace traditional, centralized source control systems such as CVS and Subversion...

, are particularly strong in this area. , both Git and Monotone have supported cherry picking for some time.

Support

Currently support for the software is available via mailing lists
Electronic mailing list
An electronic mailing list is a special usage of email that allows for widespread distribution of information to many Internet users. It is similar to a traditional mailing list — a list of names and addresses — as might be kept by an organization for sending publications to...

, IRC
Internet Relay Chat
Internet Relay Chat is a protocol for real-time Internet text messaging or synchronous conferencing. It is mainly designed for group communication in discussion forums, called channels, but also allows one-to-one communication via private message as well as chat and data transfer, including file...

, and a support wiki.

Monotone users

  • Pidgin IM now uses Monotone for both Pidgin itself and libpurple
  • Xaraya
    Xaraya
    Xaraya is a Content Management System and is Free Software published under the GNU General Public License. Xaraya is written in the programming language PHP, and is based on the previously unpublished 0.8 branch of PostNuke , however the codebase has undergone a complete rewrite.Xaraya features a...

  • AuroraUX
    AuroraUX
    AuroraUX is a suite of high-integrity applications, libraries and user tools and an operating system distribution based on the DragonflyBSD kernel source base which serves as a reference implementation of the AuroraUX suite and other AUX projects....

  • GENESIS
    GENESIS (software)
    GENESIS is a simulation environment for constructing realistic models of neurobiological systems at many levels of scale including subcellular processes, individual neurons, networks of neurons, and neuronal systems.GENESIS was developed in the Caltech laboratory of Dr. James M...

  • I2P
    I2P
    I2P is a mixed-license, free and open source project building an anonymous network .The network is a simple layer that applications can use to anonymously and securely send...


See also


External links

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK