Although I have been programming for a while (~10 years since I first learned programming), I have not yet made any (significant) contributions to any existing works. I have done many projects, but all of them are either by myself only or with another designer. This changed last October, when I started contributing to AviSynth+, a modern fork of the 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 problems with the code: its codebase is very old, it uses Visual C++ 6.0 (at least the official version), and 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 the latest version right now is 2.6.0-alpha5! Another important point: it uses CVS! And you thought SVN was bad enough.
So a guy, nicknamed ultim in IRC, has been playing, restructuring and improving this code in general. But he changed too much and the upstream didn’t want his code, so it ended up being a fork. (Okay, there is more to the story than this, but you get the gist.) Another guy, nicknamed tp7 on IRC, decided to help port internal filters from the inline assembly (which is very not portable) to C intrinsics function, which will allow compiling to both i386 and amd64 in one codebase. They also took this opportunity to upgrade the existing MMX optimization to the newer SSE2 optimization.
About me
If you haven’t realised already, this is a C++ project. Most projects I have done are in PHP and Java. Although I do know C and a little C++ from competitive programming, I have never touched C/C++ code that spans multiple source files. Moreover, I have not used Visual Studio except Visual Basic 6.0.
So what got me motivated to contribute 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 uses intrinsic function), I need to port from the original assembly code. (Well, most filters do have C code available, but some don’t.) I need to be able to read the resulting assembly code to try to find a 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.