[Nitro] Nitro Development
Jonathan Buch
john at oxyliquit.de
Sun Oct 22 10:16:18 EDT 2006
Nitro Development
==================
As the meeting on IRC didn't work out (like I expected..) I agreed with
George
to discuss this on the ML.
So, here it goes. (Document best viewed in a Markdown aware environment.)
First, problems:
----------------
### Broken Darcs repositories
We had this quite a few times now. Symptoms:
* Merging problems on untouched files
* When trying to revert, reverts to inconsistent state
Possible reasons this happens:
* Moving files without tellings darcs (`mv`).
* Touching too many lines in a file (indending many lines) plus moving
chunks
lines to other places in the same file.
* Munching too many unrelated chunks into a single patch.
* Too long sideways development, merges take different paths.
* Patches, only marginally reworked getting `record`'ed anew.
* Patches which get revoked on a central repository, but still on dev
repos.
In effect, Darcs fails to produce a valid repository state when too many
and
too complex changes are made.
### Only one central authority
George can only do so much, he's only a single guy after all.
The problem here is, that George is the main developer as well as the
project
maintainer. I guess noone in the Nitro community can fill either position
atm.
### Detached community development
Many people (Alex, manv, Fabian, me, nusgnaf and others I don't remember)
worked on manverus repo. We often tried to collect patches from George
into
this repo, but we often faced the problem that either changes were already
done or something else was done at the same places => merge problems.
To resolve those, it's needed to make patches for patches, merge patches,
which will never find their way back to George. Bad, inconsistent state.
When trying to let the patches flow back to the head repo (George) we face
the
exact same problem. We need to ensure that we don't push crap to George.
This is either work intensive (make new patches, based on a pure George
repo)
or messy (push also merge patches).
Despite Darcs being a very sophisticated tool, it is not perfect, as shown
above.
The current development style is two-fold:
The first side is George: Work on new features, push them to own repo,
integrate occassional patch from outside (if it doesn't produce merge
errors),
check with own applications.
Second is the community: Work on whatever fails, make it possible to run
own
applications without errors, push to manv repo. Many work goes into fixing
Unit Tests. Finally try to push patches to George.
### Almost no communication between George and Community
George loves working on new features ("I got something great worked out!
You'll see it monday!"). The flow of information from George to the
community
isn't quite as strong as it perhaps should be.
The other way round: In #nitro on irc the 'core' community developers
coordinate their actions, nothing ever gets done twice, the feedback cycle
is
much faster. But this information doesn't flow back to George, as long as
he
isn't online (which he rarely is for longer than 10 minutes and once or
twice in the week, due to having no internet connection at home). So
information
(some of which perhaps should be posted to ML or to George) stays only in
the
IRC community.
How to make it better?
----------------------
### Broken Darcs repositories
Two options:
1. Stay on Darcs, but create fresh repo
2. Use other revision control system
Problems with the first approach: It could happen again, if it does, we
have
to go for another rcs.
In case 1 we will lose all history, in the second case one can think of
transferring the history manually by "`record`'ing" the changes in the
other
rcs.
When using another another rcs we have to consider a few things.
* Popularity of the rcs
When popular enough (speak: Subversion) it can be used to get additional
developers.
* Type of the rcs
Distributed or central. When central, George (or whoever the maintainer
is)
has to set up a central repository where everybody works on (possibly in
branches). Patches from outsiders (non core developers) have to be
accepted
by core-developers in normal diff/patch form.
When using a distributed rcs, this is not needed and it is easier for
non-core developers to create a branch, work on it and contribute to
Nitro.
* Platform the rcs runs on
Not everyone is on Linux or other posix-aware systems. I think we have
to
support Windows users here as well.
Options:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software/
* Subversion
Popularity: high
Type: central
Platform: any
This would be my personal third choice. It is perhaps the best option
for
Nitro. No known problems with merging, used in many OSS projects.
* Bazaar (aka Bazaar NG aka Bazaar 2.0)
Popularity: low
Type: distributed
Platform: any (Python)
George brought that one up. Created and maintained by Canonical.
Apparently not really maintained actively. I have heard of problems
using
it for bigger projects.
* Darcs
Popularity: uh, low I guess
Type: distributed
Platform: any
This would be my personal first choice. Too bad it can't handle all
kinds
of development.
* SVK
Popularity: no idea
Type: distributed
Platform: any
Interesting? Uses subversion as backend, dunno how it works.
(My personal second choice would be GNU Arch. Git would also be very
interesting, but is Posix only.) I would like sticking to Darcs, but I
can't
keep working on broken repositories. I don't like Subversion...
Lets make a survey, everyone please state his idea which revision control
software should be used. Keep in mind that this will have influence on how
the Nitro development model will look like.
When going for a central repository, George (or the current maintainer)
has to
set up a central repo, where _all_ current core-developers work on,
including
George. Under no circumstances will I shuffle normal `diff`s. This has to
be quite dynamic, as the developers can change quite rapidly (I want bryan
and
zimba back...).
### Only one central authority
Maybe the maintainer role of George can be partly taken over by someone
else.
In 0.31 this already worked ok I think (this was devlab and release just
like
that). Many thanks to Zimba again to provide this place in the first
place.
This someone would have to do following:
* Maintain the roadmap
* Check with the main developers what has been done, who is doing what
* Check the current 'stable to be' repo if it is on track to next roadmap
* Make sure that repo is in a consistent state
### Detached community development
This is more or less dependand on the communication between _all_
core-developers.
I hope _William_ and _Eivind Eklund_ can help here.
Basic layout of current community.
* A single main contributor (George)
* 3-4 core-developers (Manveru, Fabian, Jonathan)
* Other people with only occasional patches (Nusgnaf, Alex and others)
As you both have more experience with organizing (I for example have none,
and probably never will have) I really hope you can give some pointers,
observe how we do stuff, bring forth ideas which we haven't thought of.
### Almost no communication between George and Community
This is perhaps the biggest problem right now (right after darcs merging
problems).
Any ideas?
### Development in general
A quote from Tom Lord:
> **Using commit Well ? The Idea of a Clean Changeset**
>When you commit a set of changes, it is generally "best practice" to make
> sure you are creating a clean changeset.A clean changeset is one that
> contains only changes that are all related andfor a single purpose. For
> example, if you have several bugs to fix, orseveral features to add, try
> not to mix those changes up in a single commit.There are many advantages
> to clean changesets but foremost among them are:**Easier Review** It is
> easy for someone to understand a changeset if it isonly trying to do one
> thing.**Easier Merging** As we'll learn in later chapters, there are
> circumstancesin which you'll want to look at a collection of changesets
> in an archive andpick-and-choose among them. Perhaps you want to grab
> "bug fix A" but not"new feature B". If each changeset has only one
> purpose, that kind ofcherrypicking is much more practical.
So, my proposal for patches:
* Clean Changesets
* Unit Tests **always** have to run
The second point is only valid, when working on small changes and or on the
stable repo. When doing big structural changes to the whole source tree
(like
the adapter changes) this can't work.
### Over and Out
Keep in mind, this is only my personal meaning and only meant to be a base
for
discussion.
Things to think about:
* Which revision control software to use
* How to organize releases
* How to organize quality control
* How to organize the work to be done
Jonathan
--
Feel the love
http://pinkjuice.com/pics/ruby.png
More information about the Nitro-general
mailing list