Bikes

Open Source Repository Structure

In open source software, it is desirable to have the ability to experiment with new ideas while still maintaining stability. It is also important to create a community where everyone can contribute, no matter their skillset or what they might be interested in. KivaKit and Apache Wicket both have three repositories that are organized into a ring structure to support these goals. Let’s take a look.

kivakit

In the innermost ring (in orange below) is the kivakit repository. This repository contains core projects. It is the most central, and also the most restricted:

  1. It has the most fundamental, abstract, and generally applicable projects
  2. It has the highest level of quality, stability, and documentation possible
  3. Write access to it is restricted to a small group of core committers
KivaKit Ring Structure

kivakit-extensions

The ring outside kivakit is kivakit-extensions (in blue). It builds on the core to provide extended functionality:

  1. It contains projects that are important and widely useful, but which are more concrete and not as widely applicable
  2. It has a high level of quality, and stability, and its projects are intended to be used in production
  3. Write access is restricted to contributors approved by the core committers, generally on the basis of their work product

kivakit-stuff

The outermost ring (in green) is kivakit-stuff. It builds on kivakit and kivakit-extensions to provide a community “playground”:

  1. It contains projects of many types — everything from personal projects and experiments, to completed projects that are not (yet) widely used
  2. It has a varying level of quality, usability and stability. Some projects may be ready for use in production, while others may not be.
  3. Write access is not restricted. So long contributors abide by community rules, anyone can start a project in kivakit-stuff.

Ring Migration

The key to making this ring system work (and it has worked very well for Apache Wicket since 2004) is ring migration. As projects evolve, they may be moved by the community from an outer ring to an inner ring if their quality and use increases, or from an inner ring to an outer ring, if they become disused, lack maintainer(s), or need improvements. The migration of projects between rings ensures that the rings contain the best set of projects over time.

Conclusion

The 3-ring repository structure used by Apache Wicket since 2004 has been time-tested, and provides several benefits. It partitions code by generality, and importance, and it gives everyone a chance to play, while maintaining a high level of quality, and stability for users targeting production systems.

More about KivaKit

https://state-of-the-art.org/

https://www.kivakit.org/

--

--

--

TNAV, KivaKit, Apache Wicket, Lexakai, writer, doc filmmaker, peer-reviewed researcher, Meisner-trained actor, artist, designer, founder(3x), born skeptic

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

5th Week Internship @soffico GmbH

Building a basic RFID card reader

Vagrant Error “Your VM has become inaccessible” : how to fix that ?

Where’s the Command-Line for the Internet?

LAMBDA SCHOOL — WEEK 5: BUILD WEEK

How Would Wirth code?

Unique Knowledge Graphs Applications and Use Cases

knowledge graph applications

Effective Java: Avoid Float and Double If Exact Answers Are Required

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Jonathan Locke

Jonathan Locke

TNAV, KivaKit, Apache Wicket, Lexakai, writer, doc filmmaker, peer-reviewed researcher, Meisner-trained actor, artist, designer, founder(3x), born skeptic

More from Medium

Why Messaging is a Better Way to Report Status

Ring Buffers: High Performance IPC

A ring buffer is used for low-latency, high throughput, communication between threads/processes on the same machine.

Investigating Java Heap memory and Native memory leaks

JVM memory model

Garbage Collection tuning success story — reducing young gen size