Diary Of An x264 Developer

10/17/2010 (6:50 pm)

How to contribute to open source, for companies

Filed under: development,open source,x264 ::

I have seen many nigh-incomprehensible attempts by companies to contribute to open source projects, including x264.  Developers are often simply boggled, wondering why the companies seem incapable of proper communication.  The companies assume the developers are being unreceptive, while the developers assume the companies are being incompetent, idiotic, or malicious.  Most of this seems to boil down to a basic lack of understanding of how open source works, resulting in a wide variety of misunderstandings.  Accordingly, this post will cover the dos and don’ts of corporate contribution to open source.

Do: contact the project using their preferred medium of communication.

Most open source projects use public methods of communication, such as mailing lists and IRC.  It’s not the end of the world if you mistakenly make contact with the wrong people or via the wrong medium, but be prepared to switch to the correct one once informed!  You may not be experienced using whatever form of communication the project uses, but if you refuse to communicate through proper channels, they will likely not be as inclined to assist you.  Larger open source projects are often much like companies in that they have different parts to their organization with different roles.  Don’t assume that everyone is a major developer!

If you don’t know what to do, a good bet is often to just ask someone.

Don’t: contact only one person.

Open source projects are a communal effort.  Major contributions are looked over by multiple developers and are often discussed by the community as a whole.  Yet many companies tend to contact only a single person in lieu of dealing with the project proper.  This has many flaws: to begin with, it forces a single developer (who isn’t paid by you) to act as your liaison, adding yet another layer between what you want and the people you want to talk to.  Contribution to open source projects should not be a game of telephone.

Of course, there are exceptions to this: sometimes a single developer is in charge of the entirety of some particular aspect of a project that you intend to contribute to, in which case this might not be so bad.

Do: make clear exactly what it is you are contributing.

Are you contributing code?  Development resources?  Money?  API documentation?  Make it as clear as possible, from the start!  How developers react, which developers get involved, and their expectations will depend heavily on what they think you are providing.  Make sure their expectations match reality.  Great confusion can result when they do not.

This also applies in the reverse — if there’s something you need from the project, such as support or assistance with development of your patch, make that explicitly clear.

Don’t: code dump.

Code does not have intrinsic value: it is only useful as part of a working, living project.  Most projects react very negatively to large “dumps” of code without associated human resources.  That is, they expect you to work with them to finalize the code until it is ready to be committed.  Of course, it’s better to work with the project from the start: this avoids the situation of writing 50,000 lines of code independently and then finding that half of it needs to be rewritten.  Or, worse, writing an enormous amount of code only to find it completely unnecessary.

Of course, the reverse option — keeping such code to yourself — is often even more costly, as it forces you to maintain the code instead of the official developers.

Do: ignore trolls.

As mentioned above, many projects use public communication methods — which, of course, allow anyone to communicate, by nature of being public.  Not everyone on a project’s IRC or mailing list is necessarily qualified to officially represent the project.  It is not too uncommon for a prospective corporate contributor to be turned off by the uninviting words of someone who isn’t even involved in the project due to assuming that they were.  Make sure you’re dealing with the right people before making conclusions.

Don’t: disappear.

If you are going to try to be involved in a project, you need to stay in contact.  We’ve had all too many companies who simply disappear after the initial introduction.  Some tell us that we’ll need an NDA, then never provide it or send status updates.  You may know why you’re not in contact — political issues at the company, product launch crunches, a nice vacation to the Bahamas — but we don’t!  If you disappear, we will assume that you gave up.

Above all, don’t assume that being at a large successful company makes you immune to these problems.  If anything, these problems seem to be the most common at the largest companies.  I didn’t name any names in this post, but practically every single one of these rules has been violated at some point by companies looking to contribute to x264.  In the larger scale of open source, these problems happen constantly.  Don’t fall into the same traps that many other companies have.

If you’re an open source developer reading this post, remember it next time you see a company acting seemingly nonsensically in an attempt to contribute: it’s quite possible they just don’t know what to do.  And just because they’re doing it wrong doesn’t mean that it isn’t your responsibility to try to help them do it right.

9 Responses to “How to contribute to open source, for companies”

  1. Esurnir Says:

    something tell me today’s post is sponsored by Intel o:).

  2. Mark Says:

    I am significantly involved with a couple open source projects and contribute relatively minor bug fixes to many others. Nothing annoys me more than having a patch and not being able to find a place to submit it. Having to create an account in the bug tracker is already annoying. The best is a public address or mailing list that I can trivially subscribe to, then git send-email my patches. Github pull requests are also good. Anything requiring manual authorization from upstream is a major turn-off since it introduces latency into my workflow. Especially if I’m not yet invested in the project, I just want to send the patches and get on with my work.

  3. NM64 Says:

    That’s funny because AMD has a better open source track record.

  4. Amitp Says:

    I’m new to X264 and would love some help.

    Do you know of any X264 implementation separating the ME process for FPGA acceleration purpose?

    Is searching the source video (not ref-frames), and provide the X264 with pivots to refine ME upon make any sense?

    Is an i7 architecture encode 720p@30fps, good quality in real-time?

    I’m sorry if my questions are dumb or irrelevant to this post, but would appreciate the help.

  5. Dark Shikari Says:

    @Mark

    Quite true as well. It’s the job of developers to make life easier for contributors just as it’s the job for contributors to make life easier for developers. Neither should expect the other to magically figure everything out on their own.

  6. BondEar Says:

    @Amitp

    “Is an i7 architecture encode 720p@30fps, good quality in real-time?”

    Here’s what you do (I assume you have a computer with an i7):

    1. Find a 720p test clip or film you can use (Dark Shikari probably knows the best ones, but to start you can look for Creative Commons licensed films in 720p like Sita Sings the Blues, Big Buck Bunny, Sintel, etc)

    2. Encode that test clip using your i7

    3. Divide the number of frames of the clip by the encode time. If it’s over 30, congratulations!

  7. STaRGaZeR Says:

    The “Sandy Bridge Video acceleration in x264″ thread at Doom10 has everything in this list, even the Doom9/10 resident AMD troll ;)

    Great source of inspiration.

  8. Andy Beard Says:

    Just to play a little devil’s advocate having read a ton of discussion elsewhere, it is also important for open source project members to learn how to work with large hardware vendors.
    From my time in the games industry I always found the hardware industry (Intel, AMD, Nvidia etc) quite supportive of technology that can drive new hardware sales.

  9. Relgoshan Says:

    Sometimes, an even better option is to crash-land the working example on a popular site. If it’s a humiliating and brilliant addition, they will have to quietly add it.

Leave a Reply