My First Contribution to an Open Source Project: A story
Although I have been programming for a while (~10 years since I first learn programming), I have not yet made any (significant) contributions to existing works. I have done many projects, but all of them are either myself only or me and another designer. This changed last October, when I start contributing to AviSynth+, a modern fork of original AviSynth project, seriously. For a note, AviSynth is a script-based, non-linear video editing program/library.
History
AviSynth is heavily used in The Scene and fan subtitle community for fixing problems in source, mostly MPEG-2 transport steam from HDTV capping. Admittedly, this is not exactly legal, but AviSynth can also be used to perform normal video editing. A lot of high quality video filters also first appear in AviSynth.
ฺBut there are also a lot of problem with the code: its codebase is very old, it uses Visual C++ 6.0 (at least official version), most filters only have MMX support (with guidelines for instruction pairing i.e. Pentium MMX era!) and low quality code in general. Also, AviSynth is not very actively developed: 2.6.0-alpha was released 6 years ago, and latest version right now is 2.6.0-alpha5! Another most important point: it uses CVS (and you thought subversion is bad enough).
So a guy, nicknamed ultim in IRC, have been playing, restructuring and improving this code in general. But he changed to much and the upstream don’t want his code, so it ended up being a fork. (Okay, there are more story than this, but you get the gist.) Another guy, nicknamed tp7 on IRC, decided to help porting internal filters from inline assembly (which is very not portable) to C intrinsics function, which will allow compiling to both i386 and amd64 in one codebase. Also to upgrade existing MMX optimization to newer SSE2 optimization.
About me
If you haven’t realised already, this is C++ project. Most projects I have done are in PHP and Java. Although I do know C and little C++ from competitive programming, I have never touch C/C++ code that spans multiple source file. And I have not used Visual Studio except Visual Basic 6.0.
So what get me motivated for contributing to this project? I want to learn Assembly. Yes, I really do. And it is both easier and more fun than I initially expected. Even though I don’t write assembly directly (because I/the project use intrinsics function), I need to port from original assembly code. (Well, most filters do have C code available, but some don’t) And I need to be able to read resulting assembly code to try to find hotspot for optimization.
As a matter of fact, starting your open source career with Assembly may not sound like a good idea, but it did work for me. And now I think I know enough basic assembly.
Result
You can look up my GitHub to see what I have contributed to the project. Even though it has been only half a year, I am confident to say that this is the first open source project I have contributed to. And I am proud of it.