SPO 600 - Lab 1

In this blog post, I will compare Visual Studio Code, a lightweight source code editor developed by Microsoft and Wine, a compatibility layer that allows Unix-like Operating Systems to run Windows programs.

Visual Studio Code

License: MIT 

Procedure for accepting new code:
Visual Studio Code uses a git repository on GitHub. The contributor would open an issue on the "Issues" section, then vscodebot would assign it to a Microsoft developer. After reviewing the issue, if the developer thinks it makes sense, he/she would add an "help wanted" label on the issue.
When a contributor fixes the issue, he/she has to sign a Contributor License Agreement (CLA) if that hasn't been done before, performs a pull request and commit the changes, a developer from Microsoft would check the commit, and merge the commit to master if it is approved.

Patch: https://github.com/Microsoft/vscode/pull/41653

How many people are involved: 3, and one of them seems to work for Microsoft.

How long it takes: 2 days

Participants responsiveness:
The participants are very responsive, and the process was quickly completed.

What issues are discussed and resolved:
A contributor suggested there should be an option to include a date when creating snippets, and the feature (as well as its tests) was added by another contributor.

Wine

License: GNU LGPL 

Procedure for accepting new code: 
The source of Wine is held in a git repository owned by Alexandre Julliard (project leader of Wine). They have a dedicated section for new contributors on how to contribute. They have a mailing list of commit for developers to learn about commits to the repository, and they use Bugzilla bug tracking system. 
When a contributor wants to submit a patch, he/she would test it, make a pull request, and wait for Alexandre Julliard to commit it to master once he approves it.

Patch: https://bugs.winehq.org/show_bug.cgi?id=44035

How many people are involved: 3

How long it takes: 71 days

Participants responsiveness:
The participants are fairly responsive, though the process took quite a while to complete (considering Windows API isn't something easy to deal with).

What issues are discussed and resolved:
A contributor said the Xenia emulator doesn't work on Wine (with several screenshots and error messages) due to missing the semi-stub of GetDpiForMonitor, and after 2 months it was fixed by another contributor.

Conclusion

Both Visual Studio Code and Wine use git and have a centralized version control and bug tracking system, and the submitting process are very similar (both of them requires a pull request to be reviewed by the development team before committed, due to the scope of both projects), but there are still some differences.

For Visual Studio Code, which uses GitHub, provide contributors a more modern, user-friendly interface. GitHub also separates the issue and the pull request, which is more concise and easier for newcomers to follow. 
The biggest disadvantage of Visual Studio Code's approach is a contributor must sign a CLA when he/she wants to make a pull request, since it is developed by Microsoft and they don't want to get into legal troubles when they want to re-license it (though you only have to sign it once).

For Wine, which uses a mailing list and Bugzilla, is harder for a newcomer to contribute, since it uses a mailing list for tracking commits, and the Bugzilla interface can be quite intimidating to a newcomer (although it should be noted Wine was developed long before git and GitHub)
But Wine's approach has one advantage, which is submitting process is relatively straightforward, as a contributor doesn't have to sign a CLA to make a pull request, since it was not written by a company, but a group of volunteers.

If I want to successfully submit a patch on both communities, I would have to read through their respective contributing guidelines to make sure I won't broke any rules, and test my code before making the pull request. For Wine though, there is one specific thing I also have to do - I have to write code in C89 standard. Which means I have to do this in the most old-school way possible: 


const WCHAR correct[] = {          
    'H','e','l','l','o',' ','w','o','r','l','d','!', 0
};

But not the way I learned before, and familiar with:

const WCHAR wrong[] = L"Hello world!";

Which can be quite tedious.

Comments

Popular posts from this blog

SPO 600 Project - Stage 1

SPO 600 - Lab 5