123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- CONTEXT
- =======
- The FFmpeg project merges all the changes from the Libav project
- (https://libav.org) since the origin of the fork (around 2011).
- With the exceptions of some commits due to technical/political disagreements or
- issues, the changes are merged on a more or less regular schedule (daily for
- years thanks to Michael, but more sparse nowadays).
- WHY
- ===
- The majority of the active developers believe the project needs to keep this
- policy for various reasons.
- The most important one is that we don't want our users to have to choose
- between two distributors of libraries of the exact same name in order to have a
- different set of features and bugfixes. By taking the responsibility of
- unifying the two codebases, we allow users to benefit from the changes from the
- two teams.
- Today, FFmpeg has a much larger user database (we are distributed by every
- major distribution), so we consider this mission a priority.
- A different approach to the merge could have been to pick the changes we are
- interested in and drop most of the cosmetics and other less important changes.
- Unfortunately, this makes the following picks much harder, especially since the
- Libav project is involved in various deep API changes. As a result, we decide
- to virtually take everything done there.
- Any Libav developer is of course welcome anytime to contribute directly to the
- FFmpeg tree. Of course, we fully understand and are forced to accept that very
- few Libav developers are interested in doing so, but we still want to recognize
- their work. This leads us to create merge commits for every single one from
- Libav. The original commit appears totally unchanged with full authorship in
- our history (and the conflict are solved in the merge one). That way, not a
- single thing from Libav will be lost in the future in case some reunification
- happens, or that project disappears one way or another.
- DOWNSIDES
- =========
- Of course, there are many downsides to this approach.
- - It causes a non negligible merge commits pollution. We make sure there are
- not several level of merges entangled (we do a 1:1 merge/commit), but it's
- still a non-linear history.
- - Many duplicated work. For instance, we added libavresample in our tree to
- keep compatibility with Libav when our libswresample was already covering the
- exact same purpose. The same thing happened for various elements such as the
- ProRes support (but differences in features, bugs, licenses, ...). There are
- many work to do to unify them, and any help is very much welcome.
- - So much manpower from both FFmpeg and Libav is lost because of this mess. We
- know it, and we don't know how to fix it. It takes incredible time to do
- these merges, so we have even less time to work on things we personally care
- about. The bad vibes also do not help with keeping our developers motivated.
- - There is a growing technical risk factor with the merges due to the codebase
- differing more and more.
- MERGE GUIDELINES
- ================
- The following gives developer guidelines on how to proceed when merging Libav commits.
- Before starting, you can reduce the risk of errors on merge conflicts by using
- a different merge conflict style:
- $ git config --global merge.conflictstyle diff3
- tools/libav-merge-next-commit is a script to help merging the next commit in
- the queue. It assumes a remote named libav. It has two modes: merge, and noop.
- The noop mode creates a merge with no change to the HEAD. You can pass a hash
- as extra argument to reference a justification (it is common that we already
- have the change done in FFmpeg).
- Also see tools/murge, you can copy and paste a 3 way conflict into its stdin
- and it will display colored diffs. Any arguments to murge (like ones to suppress
- whitespace differences) are passed into colordiff.
- TODO/FIXME/UNMERGED
- ===================
- - HEVC DSP and x86 MC SIMD improvements from Libav (see http://comments.gmane.org/gmane.comp.video.ffmpeg.devel/204917)
|