wiki:CodeRepositories

Version 1 (modified by Samuli Seppänen, 12 years ago) (diff)

--

Current development repositories

Main development repositories (GitHub)

After OpenVPN 2.3-alpha1 several major changes were introduced in OpenVPN project structure, e.g. splitting several large chunks of code away from the main development tree into their own subprojects under the OpenVPN organization in GitHub (adapted from here):

  • openvpn: a standard open source project, autotools-based build system and like any other project it's buildsystem only builds itself.
  • openvpn-build: a separate project to build openvpn in various of configurations. This project is divided into the following components:
    • generic: a generic build using cross compiler, included the complete dependencies.
    • msvc: a MSVC build using Microsoft specific msbuild system.
    • windows-nsis: the Windows installer generator that uses the generic component to build using mingw cross compiler, then package the output using NSIS.
  • tap-windows: the Windows TAP driver, which is also useful outside OpenVPN
  • easy-rsa: scripts for generating SSL certificates for use with OpenVPN (or for other purposes)

Obsolete and deprecated repositories

SF.net Git repositories

The OpenVPN project has moved over to git for the main development, a move which slowly started with the 2.1.4 release. The git tree is hosted by SF.net under the OpenVPN project. It can be viewed via the SourceForge.net git browser or downloaded locally using git:

git clone git://openvpn.git.sourceforge.net/gitroot/openvpn/openvpn.git

This repository is currently (May 2012) maintained by David Sommerseth, where community fixes and James Yonan's work are integrated.

Generic instructions for using SF.net's git service can be found here. Generic usage instructions for OpenVPN project's git repository can be found here.

The branches found in the openvpn.git repository are:

master            -- The main development branch.  * All new patches should be based on this branch *
release/2.1       -- Everything related to the OpenVPN version 2.1 releases
release/2.2       -- Everything related to the OpenVPN version 2.2 releases

Release branches do not have any active development and only bug fixes should be applied to these branches after the release. A new release branch is created for each major release (2.x). All bug fixes should be developed against the master branch, and where it is decided to include such fixes in a minor release (2.1.x, 2.2.x, etc), it will be cherry-picked from the master branch and into the suitable release branch.

All major and minor releases are also tagged, and tags can be inspected by using the following git commands:

$ git tag -l               # Lists all tags
$ git tag -v <tag name>    # Verifies a signed tag
$ git show <tag name>      # Shows the tag message and the commit the tag points at

Before every major release, a beta period starts. During this process suitable beta branch will be established and used throughout the whole beta and release candidate (RC) period. After the RC period and the final release is declared, this beta branch will be renamed to a release/x.y branch. New features may be introduced to the beta releases, but when the first RC is released only stability and bug fixes are accepted.

In addition the OpenVPN project uses a testing repository as the main entrance point to test new bigger features submitted by the community All the new features will be tested out and stabilised there before making it into the master branch, and from there into a new major release.

There are several branches in the openvpn-testing git tree, each of which tracks the different patches/contributions separately. The branch structure is:

master            -- This should be identical to the openvpn.git master branch
svn-branch/BETA21 -- This should be identical to James' former SVN BETA21 branch (former svn-BETA21). This branch is inactive.
svn-branch/2.1    -- This is a git copy of James' 2.1 SVN branch, where James does his main work.  This gets merged into master.
release/2.1       -- This contains only the source relevant for the 2.1 releases. (former released-2.1)
release/2.2       -- This contains only the source relevant for the 2.2 releases. (former beta2.2)
obsolete/*        -- Obsolete branches.
{featureX}        -- Contains only patches for feature X
{featureY}        -- Contains only patches for feature Y
{featureZ}        -- Contains only patches for feature Z
frp               -- Features which are going through the feature removal process (FRP).
experimental      -- The master branch merged with other experimental feature branches.  Only for test purpose and not development.

Developers being granted a feature branch must ensure that their branch is regularly rebased against the master branch. The same applies to maintainers of external development git trees who wants to see their work getting accepted too. The developers "owning" a feature branch is responsible for all development in that branch.

The branches gathered under obsolete/* are misc branches which is no longer in use. As some of them might have a historical value, they are just put aside. This may happen to branches which have been merged into master and are now developed on the master branch instead. Eventually they will be deleted when their historical purpose is no longer of any value.

The experimental branch is a collection of all feature branches in development and the master branch. This branch is regularly rebased against the master branch. This branch may also be completely rebuilt from time to time. Consider this branch as a view-and-test-only branch. No development must ever happen directly on the experimental branch.

To fetch the latest openvpn-testing tree, use

git clone git://openvpn.git.sourceforge.net/gitroot/openvpn/openvpn-testing.git

You will here get a openvpn-testing directory. When entering this directory, you will get the 'master' branch by default. To checkout the experimental branch, use

git checkout -b experimental origin/experimental

To see all available branches, use

git branch -a

Use the code in the experimental branch from this git tree if you want the "latest and greatest" features and you're willing to accept that the code is experimental and most likely unstable.

James' SVN repository

James Yonan hosts his own SVN repository at openvpn.net. Instructions for using it can be found here. Only James has write access to this repository, but anonymous read-only access is available. This repository is being phased out as discussed in the IRC meeting on 8th July 2010. At the moment, it's (effectively) just one of the development trees Git pulls code from.

A copy of James' working branch (openvpn/branch/2.1) is also available in the openvpn-testing.git tree as the the svn-branch/2.1 git branch. This git branch is updated against the SVN branch regularly.

Old CVS repository

For the historians among us there's the old CVS tree, which has been made available as an inactive git tree. This tree can be browsed here or downloaded locally:

git clone git://openvpn.git.sourceforge.net/gitroot/openvpn/openvpn-historical-cvs.git

Note that no new development happens in this tree.