What are the differences between the -next tree and the -mm tree?

Giovanni Gherdovich g.gherdovich at gmail.com
Tue Dec 8 05:56:47 EST 2015


Hello,

I am not a kernel developer but I think I can answer this.

This is how I understand it:

Short version:

-next is a very special Linux branch managed by Linus Torvalds
that contains changes from all subsystem that are considered
good candidate for the next release, but people want to see some
more testing or "maturation".

-mm is one of the many Linux subsysitems (Memory Management).

Less short version:

The -next tree is a branch of Linux managed by Linus Torvalds containing
"experimental" or "not mature enough" changes.  When Linus is convinced
that a change is good, it will "graduate" it by merging that change into a
Linux release candidate (-rc).  The time a change sit in -next before
graduating to -rc is variable and depends on the change itself; something
obviusly correct will graduate fast, while some other change might need a
long -next time or could even never graduate. The act of deciding what
graduates and what doesn't take place in a point in time known as the
"merge window". Better said, a given version of -rc has a well specified
deadline for things to get into it; if a change doesn't graduate fast
enough, it slips into the next window.

So, after this illustration, you might thing of the possibility of some
changes rotting in -next forever. Can you imagine after decades of kernel
life what sort of mess this "limbo" branch could become? That's why
periodically -next is "nuked" and rebuilt from all changes not yet
graduated yet but are still worth of keeping around. That's the occasion to
do some cleanup. This process of burning and rebuilding -next is mostly
automated; one useful tool is "git rerere" [0][1] which let you record
conflict fixes you did in past merges.

This workflow is sometimes called "-next branch workflow" and is explained
in the gitworkflows(7) man page [2]. I made a few pictures to explain it
graphically in a post[3] of my blog.

linux-mm, in the other hand, is a branch that contains all Memory
Management (MM) related changes, as you can see in the MAINTAINERS file[4].

So, about the message you linked: "Most of the -mm tree is already in the
linux-next tree" means that at that point in time, October 2013, -next
included most of -mm. But the message doesn't say two "obvious" but
important things:

1) the other inclusion is not true! -next wasn't equal to -mm, but surely
   much larger (think of all changes awaiting graduation from the other
   subsystems)
2) given the dynamic nature of -next, which is periodically destroyed and
   rebuilt, that statement only held only until the following -next rebuild
   (i.e. the beginning of the new development cycle).

Please take what I say with a grain of salt, as I never participated to the
kernel development and I am only an external observer. Consider what I
write here as an explaination attempt, and I invite all people who know
better to correct it.

Cheers,
Giovanni

[0] https://git-scm.com/docs/git-rerere
[1] https://git-scm.com/blog/2010/03/08/rerere.html
[2] https://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html
[3]
http://www.gghh.name/dibtp/2014/07/25/the-next-branch-workflow-and-criss-cross-merges.html
[4] https://github.com/torvalds/linux/blob/master/MAINTAINERS#L6955
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20151208/253d4dda/attachment.html 


More information about the Kernelnewbies mailing list