There are millions of free and open source software available at the internet. Most are done by private persons in their spare time. Some bigger are supported by companies or organizations like the Apache foundation.
This blog post is about how and where you can publish your software source code. The last few years there where a lot of platforms created who make it easy to share your code in a repository. This makes it even easier for you to collaborate with other developers who maybe fix a bug or made an improvement to your software.
Step 1: Choose a license
This is a nasty task you have to do. What is the best license for your software? Nobody can help you here. You have to read them and decide wise for future use of your software. GPL is very popular but in my opinion not the best license. MIT, BSD or the Apache License a worth a review, too. Just have a look at the open source license Wikipedia page here or review them here by category.
Don't invent a new license. There are many well documented and accepted licenses you can use, don't try to create a new one if you don't need to. If you have a problem with someone who doesn't respect your license you maybe will not have the ability to fight him. If you're using one of the well known licenses and it's forced by someone you have the possibility to talk to the Free software foundation and ask for help in your case.
Step 2: Publish your code
If you are using a VCS or DVCS like Subversion, CVS, Mercurial or GIT there are some real nice cloud services which make it easy and cheap for you to publish your code and create the basic community functions for your project.
For example GitHub or SourceForge are very famous platforms for open source projects today. You should find a platform which is well known and used by many other developers to make it easy for them to review and join your project. GitHub for example is very famous for all Git fans and users. Since Git became one of the most used DVCS systems it growth very fast and still provides a good service and tool set for you as user and developer.
SourceForge is one of the oldest platforms in the market. They allow you to choose different versioning systems and you are able to add a lot of extra tools to your project. For example LimeSurvey or forums , etc.
If you're using Mercurial there is for example bitbucket as a service provider.
You see there are alot of services available you just have to pick the right for you.
Maybe review this discussion on Stackoverflow what others think: http://stackoverflow.com/questions/6883638/how-to-publish-code-as-open-source
Step 3: Keep being active and create a community
This step is the most difficult one. A good open source project lives with its activity. You need to keep your used libraries up to date, react on new needs or keep doing fixes for your users. It's very important to not see an open source project as a grave yard for unmaintained source code. This will not help you and not help others if you commit not working or just bad code.
Nobody wants to improve your bad programmed application for you. As a main maintainer or founder of a successful open source project you need to keep active and open for new ideas and other people. If you do so others will join and help you and improve your code.
Another important task is to keep talking about your project. Write some blog posts, twitter and answer some forum posts. You need to write documentation what you project does and who can have a benefit from it. This makes your work more visible and more people with the same pain will find you and help and use your software.
There is a lot of information around:
Step 4: "Software is free people are not"
This statement was made by one of the founders of the free open source ERP Adempiere where I worked some hours of my spare time in the past. If people ask you to build in functionality in an urgent way and you need to do you living from programming and projects, ask them for money. Even an open source programmer needs some money. If they are not willing to pay the code is free and open for them to do it faster by themselves.
This is not arrogant it's just life. Don't ask for money for every feature, that's not what I want to tell you. But you will have some requests which will not be communicated in an adequate way so answer them in a nice but clear way.