Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Свободная и открытая система контроля версий программного обеспечения
Free and open source software versioning and revision control system
Apache Subversion (часто сокращается как SVN, по названию команды svn) — это система контроля версий программного обеспечения, распространяемая как открытый исходный код под лицензией Apache. Разработчики программного обеспечения используют Subversion для ведения текущих и исторических версий файлов, таких как исходный код, веб-страницы и документация. Её цель — стать преимущественно совместимым преемником широко используемой системы Concurrent Versions System (CVS). Subversion широко используется в сообществе открытого исходного кода: например, в проектах Apache Software Foundation, FreeBSD, SourceForge, а также с 2006 по 2019 год — в GCC. Ранее CodePlex часто использовался для размещения репозиториев Subversion. Subversion была создана компанией CollabNet Inc. в 2000 году и в настоящее время является проектом Apache высшего уровня, разрабатываемым и используемым глобальным сообществом разработчиков.
Apache Subversion (often abbreviated SVN, after its command name svn) is a software versioning and revision 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). The open source community has used Subversion widely: for example, in projects such as Apache Software Foundation, FreeBSD, SourceForge, and from 2006 to 2019, GCC. CodePlex was previously a common host for Subversion repositories. Subversion was created by CollabNet Inc. in 2000, and is now a top level Apache project being built and used by a global community of contributors.
История
CollabNet основал проект Subversion в 2000 году с целью создания системы управления версиями с открытым исходным кодом, работающей аналогично CVS, но исправляющей ошибки и предоставляющей некоторые функции, отсутствующие в CVS. В феврале 2004 года была выпущена версия 1.0. В ноябре 2009 года Subversion был принят в Apache Incubator, что ознаменовало начало процесса становления стандартным проектом Apache верхнего уровня. 17 февраля 2010 года он стал проектом Apache высшего уровня.
CollabNet founded the Subversion project in 2000 as an effort to write an open source version control system which operated much like CVS but which fixed the bugs and supplied some features missing in CVS. and in February 2004, version 1.0 was released. In November 2009, Subversion was accepted into Apache Incubator: this marked the beginning of the process to become a standard top level Apache project. It became a top level Apache project on February 17, 2010. Version Original release date Latest version Latest release date Status 2004 02 23 1.0.9 2004 10 13 No longer supported 2004 09 29 1.1.4 2005 04 01 No longer supported 2005 05 21 1.2.3 2005 08 19 No longer supported 2005 12 30 1.3.2 2006 05 23 No longer supported 2006 09 10 1.4.6 2007 12 21 No longer supported 2008 06 19 1.5.9 2010 12 06 No longer supported 2009 03 20 1.6.23 2013 05 30 No longer supported 2011 10 11 1.7.22 2015 08 12 No longer supported 2013 06 18 1.8.19 2017 08 10 No longer supported 2015 08 05 1.9.12 2019 07 24 No longer supported 2018 04 13 1.10.8 2022 04 12 No longer supported 2018 10 30 1.11.1 2019 01 11 No longer supported 2019 04 24 1.12.2 2019 07 24 No longer supported 2019 10 30 1.13.0 2019 10 30 No longer supported2020 05 271.14.32023 12 20Fully supported, LTS2024 0x1.15.0(Not yet released)In development
Release dates are extracted from Apache Subversion's file, which records all release history.
Версия | Дата выпуска | Оригинальная версия | Дата выпуска последней версии | Статус
------- | -------- | -------- | -------- | --------
2004 02 23 | 1.0.9 | 2004 10 13 | Не поддерживается
2004 09 29 | 1.1.4 | 2005 04 01 | Не поддерживается
2005 05 21 | 1.2.3 | 2005 08 19 | Не поддерживается
2005 12 30 | 1.3.2 | 2006 05 23 | Не поддерживается
2006 09 10 | 1.4.6 | 2007 12 21 | Не поддерживается
2008 06 19 | 1.5.9 | 2010 12 06 | Не поддерживается
2009 03 20 | 1.6.23 | 2013 05 30 | Не поддерживается
2011 10 11 | 1.7.22 | 2015 08 12 | Не поддерживается
2013 06 18 | 1.8.19 | 2017 08 10 | Не поддерживается
2015 08 05 | 1.9.12 | 2019 07 24 | Не поддерживается
2018 04 13 | 1.10.8 | 2022 04 12 | Не поддерживается
2018 10 30 | 1.11.1 | 2019 01 11 | Не поддерживается
2019 04 24 | 1.12.2 | 2019 07 24 | Не поддерживается
2019 10 30 | 1.13.0 | 2019 10 30 | Не поддерживается
2020 05 27 | 1.14.2 | 2023 12 20 | Полностью поддерживается, LTS
2024 | 1.15.0 | (Дата выпуска не объявлена) | В разработке
CollabNet founded the Subversion project in 2000 as an effort to write an open source version control system which operated much like CVS but which fixed the bugs and supplied some features missing in CVS. and in February 2004, version 1.0 was released. In November 2009, Subversion was accepted into Apache Incubator: this marked the beginning of the process to become a standard top level Apache project. It became a top level Apache project on February 17, 2010. Version Original release date Latest version Latest release date Status 2004 02 23 1.0.9 2004 10 13 No longer supported 2004 09 29 1.1.4 2005 04 01 No longer supported 2005 05 21 1.2.3 2005 08 19 No longer supported 2005 12 30 1.3.2 2006 05 23 No longer supported 2006 09 10 1.4.6 2007 12 21 No longer supported 2008 06 19 1.5.9 2010 12 06 No longer supported 2009 03 20 1.6.23 2013 05 30 No longer supported 2011 10 11 1.7.22 2015 08 12 No longer supported 2013 06 18 1.8.19 2017 08 10 No longer supported 2015 08 05 1.9.12 2019 07 24 No longer supported 2018 04 13 1.10.8 2022 04 12 No longer supported 2018 10 30 1.11.1 2019 01 11 No longer supported 2019 04 24 1.12.2 2019 07 24 No longer supported 2019 10 30 1.13.0 2019 10 30 No longer supported2020 05 271.14.32023 12 20Fully supported, LTS2024 0x1.15.0(Not yet released)In development
Release dates are extracted from Apache Subversion's file, which records all release history.
Даты выпуска извлечены из файла Apache Subversion, содержащего всю историю выпусков.
CollabNet founded the Subversion project in 2000 as an effort to write an open source version control system which operated much like CVS but which fixed the bugs and supplied some features missing in CVS. and in February 2004, version 1.0 was released. In November 2009, Subversion was accepted into Apache Incubator: this marked the beginning of the process to become a standard top level Apache project. It became a top level Apache project on February 17, 2010. Version Original release date Latest version Latest release date Status 2004 02 23 1.0.9 2004 10 13 No longer supported 2004 09 29 1.1.4 2005 04 01 No longer supported 2005 05 21 1.2.3 2005 08 19 No longer supported 2005 12 30 1.3.2 2006 05 23 No longer supported 2006 09 10 1.4.6 2007 12 21 No longer supported 2008 06 19 1.5.9 2010 12 06 No longer supported 2009 03 20 1.6.23 2013 05 30 No longer supported 2011 10 11 1.7.22 2015 08 12 No longer supported 2013 06 18 1.8.19 2017 08 10 No longer supported 2015 08 05 1.9.12 2019 07 24 No longer supported 2018 04 13 1.10.8 2022 04 12 No longer supported 2018 10 30 1.11.1 2019 01 11 No longer supported 2019 04 24 1.12.2 2019 07 24 No longer supported 2019 10 30 1.13.0 2019 10 30 No longer supported2020 05 271.14.32023 12 20Fully supported, LTS2024 0x1.15.0(Not yet released)In development
Release dates are extracted from Apache Subversion's file, which records all release history.
Особенности
Коммит как истинные атомарные операции (прерванные операции коммита в CVS приводили бы к несогласованности или повреждению репозитория). Система поддерживает версионность каталогов и некоторых специфических метаданных файлов (см. Свойства). Пользователи могут очень быстро перемещать или копировать файлы и целые деревья каталогов, сохраняя при этом полную историю изменений (путем ссылки на исходный объект). Версионность символических ссылок. Встроенная поддержка бинарных файлов с эффективным хранением бинарных диффов. Apache HTTP Server в качестве сетевого сервера, WebDAV/Delta V в качестве протокола. Также существует независимый серверный процесс под названием svnserve, использующий собственный протокол по TCP/IP. Разветвление реализуется копированием каталога, что является недорогой операцией, не зависящей от размера файла. Изначально клиент-серверная архитектура, многоуровневый дизайн библиотеки. Клиент-серверный протокол отправляет диффы в обоих направлениях. Вывод, пригодный для программной обработки, включая XML-журнал. Лицензия с открытым исходным кодом – лицензия Apache, начиная с релиза 1.7; предыдущие версии использовали производную от лицензии Apache 1.1. Интернационализированные сообщения программы. Блокировка файлов для неконфликтующих изменений ("зарезервированные проверки"). Авторизация на основе пути. Языковые привязки для C#, PHP, Python, Perl, Ruby и Java. Полная поддержка MIME – пользователи могут просматривать или изменять тип MIME каждого файла, а программа знает, для каких типов MIME можно отображать различия между версиями. Отслеживание слияний – слияния между ветвями будут отслеживаться, что позволяет автоматически объединять ветви без указания Subversion, какие изменения нужно или не нужно объединять. Ченджлисты для организации коммитов в группы коммитов.
Commits as true atomic operations (interrupted commit operations in CVS would cause repository inconsistency or corruption). The system maintains versioning for directories and some specific file metadata (see Properties). Users can move or copy files and entire directory trees very quickly, while retaining full revision history (as being implemented by a reference to the original object). Versioning of symbolic links. Native support for binary files, with space efficient binary diff storage. Apache HTTP Server as network server, WebDAV/Delta V for protocol. There is also an independent server process called svnserve that uses a custom protocol over TCP/IP. Branching is implemented by a copy of a directory, thus it is a cheap operation, independent of file size. Natively client–server, layered library design. Client/server protocol sends diffs in both directions. Parsable output, including XML log output. Open source licensed – Apache License since the 1.7 release; prior versions use a derivative of the Apache Software License 1.1. Internationalized program messages. File locking for unmergeable files ("reserved checkouts"). Path based authorization. Language bindings for C#, PHP, Python, Perl, Ruby, and Java. Full MIME support – users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown. Merge tracking – merges between branches will be tracked, this allows automatic merging between branches without telling Subversion what does and does not need to be merged. Changelists to organize commits into commit groups.
Типы репозиториев
Subversion предлагает два типа хранения репозиториев.
Subversion offers two types of repository storage.
Беркли DB (недостаточный)
Первоначальная разработка Subversion использовала пакет Berkeley DB. В Subversion существуют некоторые ограничения при использовании Berkeley DB, когда программа, обращающаяся к базе данных, аварийно завершается или принудительно останавливается. Потеря или повреждение данных не происходит, но репозиторий остаётся недоступным, пока Berkeley DB воспроизводит журнал и снимает все активные блокировки. Наиболее безопасный способ использования Subversion с репозиторием Berkeley DB – это запуск одного серверного процесса от имени одного пользователя (вместо использования общей файловой системы). Поддержка Berkeley DB в качестве бэкенда была прекращена в версии 1.8.
The original development of Subversion used the Berkeley DB package. Subversion has some limitations with Berkeley DB usage when a program that accesses the database crashes or terminates forcibly. No data loss or corruption occurs, but the repository remains offline while Berkeley DB replays the journal and cleans up any outstanding locks. The safest way to use Subversion with a Berkeley DB repository involves a single server process running as one user (instead of through a shared filesystem). The Berkeley DB backend was deprecated in version 1.8.
Свойства
Одной из важных особенностей файловой системы Subversion являются свойства — простые пары "имя=значение" в текстовом формате. Большинство свойств привязаны к элементам файловой системы (то есть файлам и каталогам). Они версионируются так же, как и любые другие изменения в файловой системе. Клиент Subversion резервирует префикс "svn:" для встроенных свойств, но для определения пользовательских свойств можно использовать любые другие имена. Делает файл исполняемым в рабочих копиях, размещенных на Unix-системах, если это поддерживается файловой системой. Хранит тип интернет-медиа ("MIME-тип") файла. Влияет на обработку патчей и слияний. Список шаблонов имен файлов, которые следует игнорировать в каталоге. Аналогично файлу cvsignore в CVS. Список ключевых слов, которые следует подставлять в файл при внесении изменений. Это используется для хранения определенной информации (например, автора, даты последнего изменения, номера ревизии) в файле без участия человека. Механизм подстановки ключевых слов берет свое начало в RCS и CVS. Заставляет клиент преобразовывать символы конца строки в текстовых файлах. Используется, когда рабочая копия требуется с определенным стилем окончания строк. Обычно используется значение "native", чтобы окончания строк соответствовали стилю операционной системы пользователя. Репозитории могут требовать установки этого свойства для всех файлов, чтобы предотвратить несогласованные окончания строк, что само по себе может вызвать проблемы. Позволяет автоматически извлекать части других репозиториев в подкаталог. Указывает, что файл должен быть извлечен с правами доступа, установленными только для чтения. Это предназначено для использования с механизмом блокировки. Право доступа только для чтения напоминает о необходимости получения блокировки перед изменением файла: получение блокировки делает файл доступным для записи, а освобождение блокировки — снова только для чтения. Блокировки применяются только во время операции коммита. Блокировки можно использовать без установки этого свойства, однако это не рекомендуется, так как существует риск изменения заблокированного файла; о блокировке станет известно только при неудачной попытке коммита. Это свойство не предназначено для непосредственной установки или изменения пользователями. Оно используется исключительно для хранения символических ссылок в репозитории. При добавлении символической ссылки в репозиторий создается файл, содержащий целевой объект ссылки, с установленным этим свойством. При извлечении этого файла в Unix-подобной системе клиент преобразует его в символическую ссылку. Используется для отслеживания данных слияния (номеров ревизий) в Subversion 1.5 и более поздних версиях. Это свойство автоматически поддерживается командой `svn merge`, и не рекомендуется изменять его значение вручную. Subversion также использует свойства для самих ревизий. Как и свойства, привязанные к элементам файловой системы, имена свойств могут быть произвольными, при этом клиент Subversion использует определенные свойства с префиксом "svn:". Однако эти свойства не версионируются и могут быть изменены позже, если это разрешено хуком pre-revprop-change. Дата и время ревизии. Имя пользователя, внесшего изменения. Описание изменений, предоставленное пользователем.
One important feature of the Subversion filesystem is properties: simple name=value pairs of text. Most properties occur on filesystem entries (i. e., files and directories). These are versioned just like other changes to the filesystem. The Subversion client reserves the 'svn:' prefix for built in properties, but other names can be used to define custom properties. Makes a file on Unix hosted working copies executable, when supported by the filesystem. Stores the Internet media type ("MIME type") of a file. Affects the handling of diffs and merging. A list of filename patterns to ignore in a directory. Similar to CVS's cvsignore file. A list of keywords to substitute into a file when changes are made. The file itself must also reference the keywords as or This is used to maintain certain information (e. g., author, date of last change, revision number) in a file without human intervention. The keyword substitution mechanism originates from RCS and from CVS. Makes the client convert end of line characters in text files. Used when the working copy is needed with a specific EOL style. "native" is commonly used, so that EOLs match the user's OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can cause a problem in itself. Allows parts of other repositories to be automatically checked out into a subdirectory. Specifies that a file is to be checked out with file permissions set to read only. This is designed for use with the locking mechanism. The read only permission reminds one to obtain a lock before modifying the file: obtaining a lock makes the file writable, and releasing the lock makes it read only again. Locks are only enforced during a commit operation. Locks can be used without setting this property. However, that is not recommended, because it introduces the risk of someone modifying a locked file; they will only discover it has been locked when their commit fails. This property is not meant to be set or modified directly by users. it is only used for having symbolic links in the repository. When a symbolic link is added to the repository, a file containing the link target is created with this property set. When a Unix like system checks out this file, the client converts it to a symbolic link. Used to track merge data (revision numbers) in Subversion 1.5 (or later). This property is automatically maintained by the command, and it is not recommended to change its value manually. Subversion also uses properties on revisions themselves. Like the above properties on filesystem entries, the names are completely arbitrary, with the Subversion client using certain properties prefixed with 'svn:'. However, these properties are not versioned, and they can be changed later if allowed by a pre revprop change hook. The date and time stamp of a revision. The name of the user that submitted the change(s). The user supplied description of the change(s).
Разветвление и маркировка
Subversion использует модель межфайлового ветвления Perforce для реализации ветвей и меток. Ветвь — это отдельная линия разработки. Под метками понимается присвоение репозиторию метки в определенный момент времени, чтобы его можно было легко найти в будущем. В Subversion единственное различие между ветвями и метками заключается в способе их использования. Новая ветвь или метка создается с помощью команды "", которую следует использовать вместо встроенного механизма операционной системы. Скопированная директория связана с оригиналом в репозитории для сохранения истории, и копия занимает очень мало дополнительного места в репозитории. Все версии в каждой ветви сохраняют историю файла до момента копирования, а также все последующие изменения. Можно "сливать" изменения обратно в основную ветку или между ветвями.
Subversion uses the inter file branching model from Perforce to implement branches and tagging. A branch is a separate line of development. Tagging refers to labeling the repository at a certain point in time so that it can be easily found in the future. In Subversion, the only difference between branches and tags is how they are used. A new branch or tag is set up by using the "" command, which should be used in place of the native operating system mechanism. The copied directory is linked to the original in the repository to preserve its history, and the copy takes very little extra space in the repository. All the versions in each branch maintain the history of the file up to the point of the copy, plus any changes made since. One can "merge" changes back into the trunk or between branches.
Ограничения и проблемы
Известная проблема в Subversion влияет на реализацию операции переименования файлов и каталогов. Начиная с 2014 года, Subversion реализует переименование файлов и каталогов как "копирование" в новое имя с последующим "удалением" старого имени. Изменяются только имена, вся информация об истории изменений остаётся прежней, и Subversion по-прежнему будет использовать старое имя в более ранних ревизиях "дерева". Однако Subversion может возникать путаница, когда перемещение конфликтует с изменениями, внесёнными в других местах, как при обычных коммитах, так и при слиянии веток. В версии Subversion 1.5 были устранены некоторые из этих сценариев, в то время как другие оставались проблемными. В версии Subversion 1.8 некоторые из этих проблем были решены за счёт реализации перемещений как операции первого класса на стороне клиента, но в репозитории они по-прежнему рассматриваются как копирование и удаление. Subversion не обладает некоторыми функциями администрирования и управления репозиторием. Например, может возникнуть необходимость отредактировать репозиторий для безвозвратного удаления всех исторических записей определённых данных. Subversion не имеет встроенной поддержки для простого достижения этой цели. Subversion хранит дополнительные копии данных на локальном компьютере, что может стать проблемой для очень больших проектов или файлов, или если разработчики одновременно работают с несколькими ветками. В версиях до 1.7 эти каталоги svn на стороне клиента могли быть повреждены из-за неосторожных действий пользователей, таких как глобальные операции поиска и замены. Начиная с версии 1.7, Subversion использует единую централизованную папку для каждой рабочей области. Subversion не хранит время модификации файлов. Следовательно, файл, извлечённый из репозитория Subversion, будет иметь "текущую" дату (вместо времени модификации в репозитории), а файл, добавленный в репозиторий, будет иметь дату добавления (вместо времени модификации файла, который добавляется). Это не всегда желательно. Для смягчения этой ситуации существуют сторонние инструменты, позволяющие сохранять время модификации и другие метаданные файловой системы. Однако присвоение извлечённым файлам текущей даты также важно, поскольку именно так инструменты, такие как make(1), замечают изменения в файле для его пересборки. Subversion использует централизованную модель контроля версий. Бен Коллинз Суссман, один из разработчиков Subversion, считает, что централизованная модель поможет предотвратить сокрытие работы "недобросовестными программистами" от других членов команды во время разработки. Некоторые пользователи систем контроля версий считают централизованную модель неблагоприятной; в частности, Линус Торвальдс подверг критике модель Subversion и её разработчиков. Subversion часто плохо обрабатывает нормализацию имён файлов, выполняемую файловой системой HFS+. Это может вызвать проблемы, когда файлы с диакритическими знаками в именах добавляются в репозиторий на файловой системе, отличной от HFS+, а затем репозиторий используется с HFS+.
A known problem in Subversion affects the implementation of the file and directory rename operation. as of 2014, Subversion implements the renaming of files and directories as a "copy" to the new name followed by a "delete" of the old name. Only the names change, all data relating to the edit history remains the same, and Subversion will still use the old name in older revisions of the "tree". However, Subversion may become confused when a move conflicts with edits made elsewhere, both for regular commits and when merging branches. The Subversion 1.5 release addressed some of these scenarios while others remained problematic. The Subversion 1.8 release addressed some of these problems by making moves a first class operation on the client, but it is still treated as copy+delete in the repository. , Subversion lacks some repository administration and management features. For instance, someone may wish to edit the repository to permanently remove all historical records of certain data. Subversion does not have built in support to achieve this simply. Subversion stores additional copies of data on the local machine, which can become an issue with very large projects or files, or if developers work on multiple branches simultaneously. In versions prior to 1.7 these svn directories on the client side could become corrupted by ill advised user activity like global search/replace operations. Starting with version 1.7 Subversion uses a single centralized folder per working area. Subversion does not store the modification times of files. As such, a file checked out of a Subversion repository will have the 'current' date (instead of the modification time in the repository), and a file checked into the repository will have the date of the check in (instead of the modification time of the file being checked in). This might not always be what is wanted. To mitigate this, third party tools exist that allow for preserving modification time and other filesystem meta data. However, giving checked out files a current date is important as well — this is how tools like make(1) will take notice of a changed file for rebuilding it. Subversion uses a centralized revision control model. Ben Collins Sussman, one of the designers of Subversion, believes a centralised model would help prevent "insecure programmers" from hiding their work from other team members during development. Some users of version control systems see the centralised model as detrimental; famously, Linus Torvalds attacked Subversion's model and its developers. Subversion often does not deal well with the filename normalization performed by the HFS+ filesystem. This can cause problems when files with accented characters in their names are added to the repository on a non HFS+ filesystem and the repository is then used with HFS+.
Разработка и реализация
CollabNet продолжает поддерживать проект Subversion, однако сам проект развивается как независимое сообщество с открытым исходным кодом. В ноябре 2009 года проект был принят в Инкубатор Apache с целью стать частью деятельности Apache Software Foundation. С марта 2010 года проект официально называется Apache Subversion и является частью Apache Top Level Projects. В октябре 2009 года WANdisco объявила о найме основных разработчиков Subversion, поскольку компания стремилась стать крупным корпоративным спонсором проекта. Среди них был Хайрум Райт, президент Subversion Corporation и менеджер релизов проекта Subversion с начала 2008 года, который присоединился к компании для руководства командой разработки с открытым исходным кодом. Сообщество Subversion с открытым исходным кодом не предоставляет готовые бинарные файлы, но потенциальные пользователи могут загрузить их от добровольцев. Хотя сам проект Subversion не включает официальный графический пользовательский интерфейс (GUI) для работы с Subversion, сторонние разработчики создали ряд различных GUI, а также широкий спектр дополнительного вспомогательного программного обеспечения. Работы, анонсированные в 2009 году, включали SubversionJ (Java API) и реализацию команды Obliterate, аналогичной команде в Perforce. Оба этих улучшения были спонсированы WANdisco. Разработчики Subversion обычно одновременно работают над одной или двумя новыми функциями. В релизе 1.7 Subversion, вышедшем в октябре 2011 года, были представлены оптимизированный HTTP-транспорт для повышения производительности и переписанная библиотека рабочей копии. В 2002 году был проведен конкурс на лучший логотип Subversion. Оригинальные работы и результаты голосования за каждый логотип доступны здесь. Текущий логотип набрал наибольшее количество голосов в конкурсе.
CollabNet has continued its involvement with Subversion, but the project runs as an independent open source community. In November 2009, the project was accepted into the Apache Incubator, aiming to become part of the Apache Software Foundation's efforts. Since March 2010, the project is formally known as Apache Subversion, being a part of the Apache Top Level Projects. In October 2009, WANdisco announced the hiring of core Subversion committers as the company moved to become a major corporate sponsor of the project. This included Hyrum Wright, president of the Subversion Corporation and release manager for the Subversion project since early 2008, who joined the company to lead its open source team. The Subversion open source community does not provide binaries, but potential users can download binaries from volunteers. While the Subversion project does not include an official graphical user interface (GUI) for use with Subversion, third parties have developed a number of different GUIs, along with a wide variety of additional ancillary software. Work announced in 2009 included SubversionJ (a Java API) and implementation of the Obliterate command, similar to that provided by Perforce. Both of these enhancements were sponsored by WANdisco. The Subversion committers normally have at least one or two new features under active development at any one time. The 1.7 release of Subversion in October 2011 included a streamlined HTTP transport to improve performance and a rewritten working copy library. In 2002, a design contest was held to select the logo for Subversion. The original entries can be found here as well as the votes for each logo. The current logo received the most votes in the contest.