Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best Practices for Setup and Management of an Open Source Project

Later this year I want to release a PHP framework that I've been working on as open source. I do use source control (SVN), but it's on an extremely limited basis. I'm self-taught, I develop by myself and don't have the experience of working with large teams. I have some ideas about what can help make a project successful, but I'm fuzzy on some of the details. Since it's not yet released, I want to do everything I can to set up the right infrastructure from the beginning. What do I need to know in order to setup and manage a successful project?

Some ideas that I have to make it successful (beyond marketing it):

  • Good documentation and tutorials
  • Automated unit tests and builds to push update to the website
  • A clear roadmap
  • Bug Tracking integrated with the source control
  • A style guide to keep the code consistent
  • A forum for the community to get support, share ideas, etc.
  • A good example application built with the framework
  • A blog to keep the community informed
  • Maintaining backwards compatibility wherever possible

Some of my questions:

  • How do I setup and automate a one step submit-test-commit-generate API docs-push update to website process? Edit: Would Ant or Maven be good candidates for this? If so, do you know of any resources for setting up a PHP project using them?
  • How do I handle (technically) submissions from other users? How can I ensure that those submissions must be approved before being integrated?
  • What are some of the pitfalls that can be avoided in terms of the project community? I'd prefer to have it be as friendly and helpful as possible without a lot of drama.

I'd love to learn from your experience on any of these points. If you think I'm missing anything big, please share that as well. Any resources (preferably geared toward a beginner) that you could point me towards would also be greatly appreciated.

like image 541
VirtuosiMedia Avatar asked Apr 02 '10 16:04

VirtuosiMedia


2 Answers

I'm just getting started in community projects, but I'll give you some advice on what I know.

How do I setup and automate a one step submit-test-commit-generate API docs-push update to website process?

I've never implemented it as one process. You could just have a checklist, and possibly even create some scripts to do certain tasks. I've never worked with any source control that automates the uploading and such to be done by a script. Most of the time, there is some web interaction to be involved.

You don't want to push API changes until it's an official release.

EDIT: Working Environment

For PHP, most of the time, I either edit directly on the server and test it there, using a beta.example.com, or similar, before pushing to example.com. You could also set up an web environment on your home PC (using XAMPP for Windows, or the standard LAMP installation on Linux). You would probably just use a mirror of your repository here, so you'd do svn commit, or whichever is appropriate for the VCS or DVCS you choose.

The fun part is testing this with different PHP versions. I've not done this myself, but you could probably use a .htaccess file to run a different PHP binary in order to test it out. I'm not really sure what the best option is for this is.

I've not done much with API, as I've never created a library, but just doing a quick search I found http://www.phpdoc.org/. It looks like a mature project, so that might be a starting point.

As far as creating releases go, I generally create a script that only includes the files that are part of the distribution (it will filter out any VCS files, and anything that you don't want in the distributed file). You could write a script around find on linux (which is what I do most of the time), or there may be other better options.

How do I handle (technically) submissions from other users? How can I ensure that those submissions must be approved before being integrated?

This is mostly handled by the bug tracker, and limited access in the Version Control System. Usually, you, and the people you allow, can commit to the VCS. Other users can submit patches, but then you might have someone review the patch, test the patch, and commit. You could split these tasks up as a team, or assign a patch to one person and have them do it all.

What are some of the pitfalls that can be avoided in terms of the project community? I'd prefer to have it be as friendly and helpful as possible without a lot of drama.

I would just make sure to keep it as positive as possible with the project members and community. There's going to be some disagreements, and it will drive a few people away, but as long as you have a stable product that meets the needs of most people, I think that's all that anyone can expect.

like image 99
bradlis7 Avatar answered Oct 14 '22 08:10

bradlis7


One minor suggestion that's worked well for me: start using first-person plural pronouns, rather than singular ones. That is, talk about "we" and "us" rather than "I" and "me." It encourages other people to participate when they feel like part of team, rather than when they feel like they're contributing your own self-aggrandizement.

like image 36
jemfinch Avatar answered Oct 14 '22 07:10

jemfinch