{"id":508,"date":"2015-09-10T02:51:42","date_gmt":"2015-09-10T02:51:42","guid":{"rendered":"http:\/\/blogs.gentoo.org\/lu_zero\/?p=508"},"modified":"2015-12-06T13:43:59","modified_gmt":"2015-12-06T13:43:59","slug":"libav-the-project","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/lu_zero\/2015\/09\/10\/libav-the-project\/","title":{"rendered":"Libav: The project"},"content":{"rendered":"<blockquote><p>\n  This is a tiny introduction to Libav, the organization.\n<\/p><\/blockquote>\n<h2>Libav<\/h2>\n<p>The project aims to provide useful tools, written in portable code that is <strong>readable<\/strong>, <strong>trustworthy<\/strong> and <strong>performant<\/strong>.<\/p>\n<p><a href=\"https:\/\/libav.org\">Libav<\/a> is an opensource organization focused on developing libraries and tools to decode, manipulate and encode <strong>multimedia<\/strong> content.<\/p>\n<h3>Structure<\/h3>\n<p>The project tries to be as <strong>non-hierarchical<\/strong> as possible. Every contributor must abide by a well defined set of <strong>rules<\/strong>, no matter which <strong>role<\/strong>.<\/p>\n<p>For decisions we strive to reach near-unanimous <a href=\"https:\/\/en.wikipedia.org\/wiki\/Consensus_decision-making#Near-unanimous_consensus\">consensus<\/a>. Discussions may happen on <a href=\"irc:\/\/irc.freenode.net\/#libav-devel\">irc<\/a>, <a href=\"https:\/\/lists.libav.org\/pipermail\/libav-devel\/\">mailing-list<\/a> or in real life <a href=\"https:\/\/wiki.libav.org\/Sprint\">meetings<\/a>.<\/p>\n<p>If possible, <strong>conflicts<\/strong> should be avoided and otherwise <a href=\"https:\/\/libav.org\/about\/#Personal-Conflict-Resolution\">resolved<\/a>.<\/p>\n<h2>Join us!<\/h2>\n<p>We are always looking for enthusiastic new contributors and will help you get started. Below you can find a number of possible ways to contribute. Please <a href=\"https:\/\/libav.org\/contact\">contact<\/a> us.<\/p>\n<h2>Roles<\/h2>\n<p>Even if the project is non-hierarchical, it is possible to define specific roles within it. Roles do not really give additional <strong>power<\/strong> but additional <strong>responsibilities<\/strong>.<\/p>\n<h3>Contributor<\/h3>\n<blockquote><p>\n  Contributing to Libav makes you a Contributor!<br \/>\n  Anybody who <strong>reviews<\/strong> patches, writes patches, helps triaging bugs, writes documentation, helps people solve their problems, or keeps our infrastructure running is considered a contributor.\n<\/p><\/blockquote>\n<p>It does not matter how little you contribute. Any help is welcome.<\/p>\n<p>On top of the <a href=\"http:\/\/open-advice.org\/\">standard<\/a> great feats of contributing to an opensource project, special <a href=\"http:\/\/2.borgodoro.it\">chocolate<\/a> is always available during the events.<\/p>\n<h3>Reviewer<\/h3>\n<blockquote><p>\n  Many eyes might not make <strong>every<\/strong> bug shallow, but probably a second and a third pair might prevent some silly mistakes.\n<\/p><\/blockquote>\n<p>A reviewer is supposed to read the new patches and prevent mistakes (silly, tiny or <strong>huge<\/strong>) to land in the master.<\/p>\n<p>Because of our <a href=\"https:\/\/wiki.libav.org\/GitWorkflow\">workflow<\/a>, spending time reading other people patches is quite common.<\/p>\n<p>People with specific expertise might get nagged to give their opinion more often than others, but everybody might spot something that looks wrong and probably is.<\/p>\n<h3>Bugwrangler<\/h3>\n<blockquote><p>\n  Checking that the <a href=\"http:\/\/bugzilla.libav.org\">bugs<\/a> are fixed and ask for better reports is important.\n<\/p><\/blockquote>\n<p><a href=\"https:\/\/wiki.libav.org\/Contribute\/BugWrangling\">Bug wrangling<\/a> involves making sure reported issues have all the needed information to start fixing the problem and checking if old issues are still valid or had been fixed already.<\/p>\n<h3>Committer<\/h3>\n<blockquote><p>\n  Nobody can push a patch to the master until it is reviewed, but somebody has to push it once it is.\n<\/p><\/blockquote>\n<p>Committers are the people who push code to the main repository after it has been reviewed.<\/p>\n<p>Being a committer requires you to take newly submitted patches, make sure they work as expected either locally or pushing them through our <a href=\"http:\/\/wiki.libav.org\/Oracle\">continuous integration system<\/a> and possibly fix minor issues like typos.<\/p>\n<p>Patches from a <strong>committer<\/strong> go through the normal <strong>review<\/strong> process as well.<\/p>\n<h3>Infrastructure Administrator<\/h3>\n<p>The <a href=\"http:\/\/fate.libav.org\">regression test system<\/a>. <a href=\"http:\/\/git.libav.org\">git<\/a> repository, the <a href=\"http:\/\/samples.libav.org\">samples collection<\/a>, the <a href=\"http:\/\/libav.org\">website<\/a>, the <a href=\"http:\/\/patches.libav.org\">patch<\/a> <a href=\"http:\/\/plaid.libav.org\">trackers<\/a>, the <a href=\"http:\/\/libav.org\">wiki<\/a> and the <a href=\"http:\/\/bugzilla.libav.org\">issue tracker<\/a> are all managed on dedicated hardware.<\/p>\n<p>This infrastructure needs constant maintaining and improving.<\/p>\n<p>Most of comes from people devoting their time and (beside few exceptions) their own hardware, definitely this role requires a huge amount of <strong>dedication<\/strong>.<\/p>\n<h2>Rules<\/h2>\n<p>The project strives to provide a <strong>pleasant<\/strong> environment for everybody.<\/p>\n<p>Every <strong>contributor<\/strong> is considered a member of the team, regardless if they are a newcomer or a founder. Nobody has <strong>special<\/strong> rights or prerogatives.<\/p>\n<p>Well defined rules have been adopted since the founding of the project to ensure fairness.<\/p>\n<h3>Code of Conduct<\/h3>\n<p>A quite simple <a href=\"https:\/\/libav.org\/about\/#Code-of-Conduct\">code of conduct<\/a> is in place in our project.<\/p>\n<blockquote><p>\n  It boils down to <strong>respecting<\/strong> the other people and being pleasant to deal with.\n<\/p><\/blockquote>\n<p>It is commonly <strong>enforced<\/strong> with a friendly warning, followed by the request to leave if the person is unable to behave and, then, eventual removal if anything else fails.<\/p>\n<h2>Contribution workflow<\/h2>\n<p>The project has a simple contribution <a href=\"https:\/\/wiki.libav.org\/GitWorkflow\">workflow<\/a>:<\/p>\n<ul>\n<li>Every patch must be sent to the <a href=\"https:\/\/lists.libav.org\/pipermail\/libav-devel\/\">mailing-list<\/a><\/li>\n<li>Every patch must get a review and an <strong>Ok<\/strong> before it lands in the <a href=\"https:\/\/git.libav.org\/?p=libav.git;a=summary\">master<\/a> branch<\/li>\n<\/ul>\n<h3>Code Quality<\/h3>\n<p>We have plenty of <a href=\"http:\/\/wiki.libav.org\/Contribute\/Patches\">documentation<\/a> to make it easy for you to prepare patches.<\/p>\n<p>The reviewers usually help newcomers by <a href=\"https:\/\/wiki.libav.org\/CodingStyle\">reformatting<\/a> the first patches and pointing and fixing <a href=\"https:\/\/wiki.libav.org\/CodingStyle\/Pitfalls\">common pitfalls<\/a>.<\/p>\n<p>If some mistakes are not caught during the <strong>review<\/strong>, there are <a href=\"https:\/\/wiki.libav.org\/Oracle\">few<\/a> <a href=\"http:\/\/travis-ci.org\/libav\/libav\">additional<\/a> <a href=\"https:\/\/wiki.libav.org\/FATE\">means<\/a> to <a href=\"https:\/\/scan.coverity.com\/projects\/106\">prevent<\/a> them from hitting a release.<\/p>\n<h1>Post Scriptum<\/h1>\n<p>This post tried to summarize the project and its structure as if the <strong>legends<\/strong> surrounding it do not exist and the project is just a clean slate. Shame on me for not having written this blog post 5 years ago.<\/p>\n<h2>Past and Present<\/h2>\n<p>I already wrote about the <a href=\"https:\/\/blogs.gentoo.org\/lu_zero\/2015\/02\/20\/demotivation-fud-and-why-i-still-contribute-to-libav\/\">past<\/a> and the <a href=\"http:\/\/blogs.gentoo.org\/lu_zero\/2015\/07\/09\/my-fun-starts-now\/\">current<\/a> situation of Libav, if you are curious please do read the previous posts. I will probably blog again about the social issues soon.<\/p>\n<h2>Future<\/h2>\n<p>The Release 12 is in the ABI <strong>break<\/strong> window now and soon the release branch will be spun off! After that some of my <a href=\"https:\/\/blogs.gentoo.org\/lu_zero\/tag\/api\/\">plans<\/a> to improve the API will see some initial implementations and hopefully will be available as part of the release 13 (and <a href=\"http:\/\/codecs.multimedia.cx\/?cat=25\">nihav<\/a>)<\/p>\n<p>I will discuss <code>avframe_yield<\/code> first since <a href=\"http:\/\/codecs.multimedia.cx\/?p=1002\">Kostya<\/a> already posted about a better way to handle <strong>container formats<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a tiny introduction to Libav, the organization. Libav The project aims to provide useful tools, written in portable code that is readable, trustworthy and performant. Libav is an opensource organization focused on developing libraries and tools to decode, manipulate and encode multimedia content. Structure The project tries to be as non-hierarchical as possible. &hellip; <a href=\"https:\/\/blogs.gentoo.org\/lu_zero\/2015\/09\/10\/libav-the-project\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Libav: The project<\/span><\/a><\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[14],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p1aGWH-8c","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/posts\/508"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/comments?post=508"}],"version-history":[{"count":12,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/posts\/508\/revisions"}],"predecessor-version":[{"id":575,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/posts\/508\/revisions\/575"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/media?parent=508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/categories?post=508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/lu_zero\/wp-json\/wp\/v2\/tags?post=508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}