Read this page if you would like to contribute to a CafeSip project.
- What is CafeSip?
- How is CafeSip distributed?
- How do I get support?
- What kind of contributors is CafeSip looking for?
- What kind of skills do I need in order to contribute CafeSip?
- What kind of mind-set do I need to have in order to contribute?
- How do I get started as a contributor?
- I have a full-time job. What are the legal issues that I may have to deal with?
- What kind of computer and software is needed for CafeSip projects?
- What kind of development environment and tools are required for CafeSip projects?
- What kind of development process must be followed?
What is CafeSip?
CafeSip is an organization that supports the development of open-source SIP application developed using the Java technology. It offers an open-source suite of SIP applications from its web site (http://www.CafeSip).
Session Initiation Protocol (SIP) is a popular messaging protocol for establishing and controlling voice and multi-media sessions between computers. Using SIP phones and SIP servers, users can make telephone calls over the Internet – often referred to as Voice Over IP (VoIP). SIP is not limited to voice calls only. It can be used to establish a variety of multi-media sessions like video, chat, etc.
CafeSip hosts a number of projects aimed at building SIP applications and tools. CafeSip may host other SIP projects as well in the future. The projects are in the areas of:
- SIP platform (framework for building SIP applications).
- SIP development and testing tools.
- SIP server applications.
- SIP client applications.
We are open to other suggestions.
CafeSip is completely open-source and is distributed as per the terms and conditions laid out by the Apache Open Source License. Cafesip.org is non-commercial organization that maintains the CafeSip code and the CafeSip web site. It is composed of a group of voluntary software developers who contribute to the projects. You can be a contributor too (please read below for more information).
How is CafeSip distributed?
The source code and the binaries for CafeSip projects are distributed online. You can get hold of them from cafesip.sourceforge.net. The software is distributed as per the terms and conditions laid out by Apache license. The license basically says that you can use the software freely in a commercial or a non-commercial environment. You can freely re-distribute the software. You can create open-source or closed-source extensions and distribute them without any restrictions. However, we do not provide any warranty for the product.
So, it is possible for you to download the CafeSip software, add some value to it and offer your “own” product. The value can be in the form of (1) add new features, (2) install the package in a computer and sell a turn-key solution, (3) provide paid support. There are quite a few possibilities. You may be able to explore these possibilities better if you know the software well, particularly, if you are a contributor. The bottom line is that you can do anything you want with the software.
You can join the CafeSip mailing lists and discussion forums. You will also have access to the bug database and can write a problem report or request a new feature through this tool.
There are two types of contributors:
- Casual contributors: Individuals or organizations who find our web site, download the software and try it out, discover cool features and figure out new features/applications that can be added to enhance the product. The contributor contacts the team lead (emails on the web page) and the lead creates a new branch in the CafeSip code repository where the contributor can submit his/her code. The contributor checks out the code, develops and tests the software and commit the software to the code repository. The team lead decides whether we would like to accept the code or not. Once the team lead decides to accept the code, he/she merges the code into our regular development branch and create a new release (along with other features that are being worked on at the same time).
- Regular contributors: We make a determination on what features/enhancements we would like to add to the CafeSip suite of products. We have a set of dedicated people whom we will approach and based on their availability, allocate the work to them. Regular contributors have full access to the repository and normally submits the code in the main development branch.
Casual contributors may become regular contributors over time. In order for this to happen, the casual contributors need to demonstrate consistent high quality of work and gain the confidence of the regular contributors.
- Software developers: software developers with extensive experience in: (a) network and system programming using threads, sockets, etc., (b) developing J2EE services and applications using J2EE components like EJB, JMX, XML, SOAP, etc., (c) developing automated tests using xUnit, developing web-based user interface using the Google Web Toolkit (GWT), JSP and Servlets, (d) developing media applications using audio and video, (e) developing software in open-source projects like Tomcat, Jboss, Apache Jakarta projects, Ant, etc. Of course the developers must know Java extremely well including standard Java conventions and patterns. Other languages like C++ may also be used. Developers who have experience in UNIX and Windows shell scripting are also required.
- Protocol experts with good working knowledge of VOIP protocols like SIP, SDP, RTP, etc.
- Business analysts: people who can identify VOIP applications that are in demand or have a market for.
- Language translators: people who can independently translate user interface and documentation into various languages. The default language is English but we would like to support French, Spanish, German, Chinese and Japanese languages at the minimum.
- Documentation personnel: people who can write English Howtos & User Guides, create & manage web sites, etc.
- Customers and testers: users who want to be guinea pigs for new and early releases and provide feedback.
- First, ask yourself if you are really interested. You will have to work during weekends and nights. From our earlier experience we know that if you want to get involved just because you want to gain some experience or help finding a new job or a career, you will soon lose interest. We are really looking for people who have fun learning new technologies and creating innovative software solutions.
- If you think this may ultimately make you rich, please think again. There is a possibility that the software may go somewhere and you may gain monetarily from it, but it is not likely to happen. CafeSip will not be engaged in any commercial activities. If you want to make money from it, you will have to do it on your own. In order to make money, you can use or extend the software because it is free (so can anyone else) and because you may have the knowledge of the software internals (which others may not). The only thing that you are assured of gaining from your contribution is good experience. It is almost certain to boost your software knowledge and understanding.
- You have to be completely quality-conscious. Free software does not mean sloppy code. From our experience, most free open-source software has better quality than commercial offerings. Remember, you code will have your name and the whole world will be able to review it. You must take the time to understand the coding practices and you must know all the tools thoroughly before you can start contributing. You must follow the coding standards and conventions laid out by Sun (now Oracle) for Java and have the patience to write automated tests for your code. If you decide to contribute a piece of software, we may not add it to our code base if the quality is poor. That will be a waste of time on your part.
- When you submit your code to CafeSip, you are basically “open-sourcing” your code. Even though, we may not accept your code into the code base, we may incorporate parts of it at any time. You cannot come back later and say that the code is proprietary and it belongs to you. You cannot have your code back.
- First send us an email with your ideas. We will tell you if we know someone is working on the same/similar idea. You can then collaborate with this person/group. This step is not required but if we get excited about what your are doing, we may be able to support you better.
- If the work requires significant amount of your time, inform your family and friends that you will be busy for some time to come to avoid any conflict.
- Please make sure that you have the extensive knowledge of the programming language and your working environment (J2EE, for example). If you do not have it, you need to acquire it first through hands-on self-training. We may be able to provide you some directions.
- Make sure that you have read and understood the coding standards and conventions.
- If you have not already done so, download the source distribution from the code repository and all the documentation.
- Download all the required tools like compilers, IDE, etc. Find out how to set them up using the information provided with the source distribution and the CafeSip web site.
If you work for a commercial organization that builds SIP products and applications, they may have a problem with you contributing to CafeSip. You need to make sure that you are doing nothing illegal.
- First, read your employment contract and make sure that you are not in violation. Some companies have a clause like “whatever intellectual property you create (even outside the business hours) belongs to us”. If you have a contract like that, you may want to ask your employers in writing if they have any problem with it and act accordingly.
- It is a good idea to inform your employer anyway. Although a few old-style managers may get completely freaked out and prevent you from working on the project, most likely, they will be quite supportive given that you are not spending time on CafeSip during normal business hours.
- DO NOT COPY ANY SOFTWARE FROM A COMMERCIAL PRODUCT. In fact, you should not have the CafeSip extension that you are developing in your work computer without the permission of your employer.
- DO NOT USE AN IDEA THAT IS PATENTED. If you employer has patented a procedure, formula or a way of doing something or have some trade secrets, do not incorporate it in CafeSip even if you are creating your own implementation.
- You may copy software from another open-source project. However, you may want to study the terms and conditions (license). If the license prevents us from re-distributing the CafeSip source freely, we will not use it. Some open-source licenses have such restrictions. If in doubt (because of all the legal language), contact the organization and clarify. Please inform us that you are using parts of another open-source product in your software so that we can look into the license and acknowledge the contribution.
- You may need libraries and other resources that are not open-source (Java libraries , for example) and you have to include them with the CafeSip distribution. Please ensure that the library in binary form is freely re-distributable. If in doubt (because of all the legal language), contact the organization and clarify. Please inform us that you are using the library in your software so that we can look into the license and acknowledge the contribution.
- Do not research or work on CafeSip during normal business hours without the permission of your employer. For CafeSip development, you may need to print web pages, documents, etc. Do not use your company printers and copiers for this purpose. Do not use any other company resources (computers, hard-disk space, telephone, email, etc.) for CafeSip projects.
- If you think your company can use CafeSip or parts of it, you are free to use it in compliance with the CafeSip license. However, you must inform your employer, that you are using CafeSip and the license terms and conditions.
- You will need a standard desktop computer for the development. The computer must have a 2GHz CPU or higher, 1GB RAM (2-4GB foe J2EE projects) or higher and 500MB free disk space.
- Your computer must run either Linux or Windows although Mac and other computer may also work out but we have not tried the software on MAC, Solaris, etc. For some projects, you may need a specific operating system although we try to keep the software independent of the operating system.
- You will need the Java compiler from Sun and Ant from Apache. Some projects may need other tools to be installed as well.
- Some projects may require a J2EE server. We use Jboss.
- Some projects may need a MySQL or other open-source database.
- We use the Eclipse IDE with a number of additional plugins. You can also use Netbeans if you like.
- All our documentations are in HTML format. We use the Mozilla Composer for creating web pages. We use Dia and GIMP for creating diagrams.
Each project will have its own specific requirements. A developer creating a new project keep the following in mind:
- Every project has a build script that will generate code (if necessary), compile the sources and create binary distributions (if necessary). We should be able to run the build from a command-line shell. We use Apache Ant build. Please make sure that your project build does not use tools that require a commercial tool, a GUI-based tool and anything else out of the ordinary. If there is any special processing required during the build process, consider creating Ant tasks for that purpose. The bottom line is that we should be able to build the project using a free Java compiler and build tool like Ant. For example, a plugin for the Eclipse IDE may give you some nice tools for creating packages for deployment but you do not want to use them because it will require the build process to run Eclipse.
- All build tools and libraries must be freely available and it should not cost anything to download. For all Java projects, we use the Java compiler from Sun and Ant from Apache. We would not like it to be different for a particular project unless absolutely necessary. This does not mean that you cannot use nice tools for the development environment but the build should not depend on it.
- Very often you need a special set of development tools and libraries that is not needed during the run-time. Make sure that these components are freely available and freely distributable. If these tools consist of a few files, include them in the project code tree.
- If you are using a GUI builder, please make sure that the tool is freely available. Do not use Jbuilder, WSAD or other commercial tools. You may want to consider the GUI builder from Netbeans or Eclipse (preferred).
- Make every attempt to ensure that the project can be built using Windows and the Linux environment. Rarely, this may not be possible because, for example, the project deliverable may only run on Linux.
- All libraries required by the project must be included in the project code tree even if it means duplication of some libraries among multiple projects. One should be able to download just the project he/she needs instead of having to download the entire CafeSip code base.
- Make sure that the directory structure for your project follows the conventions laid out by the CafeSip. For example, all the source packages must be under the “src” directory, all shell scripts under the “bin” directory, etc.
- Please include the license files that explains the license terms and conditions for the CafeSip project as well as any third party tools and libraries included with your project.
- Please include a README text file that explains how to build and run the project under the root directory of your project. It should also include the version number
- Optionally, include a DEVELOPER-README text file that explains how to setup the development environment. This document should include instructions on how to setup the development environment including the IDE project setup. Alternatively, you can add this information to the CafeSip web site at appropriate locations.
- Use tools like Javadoc, EMF and SchemaSpy for documenting the design. That way, you will be able to generate the design document anytime. However, if you need to create additional documentation and diagrams using a UML tool, use a free UML tool like Dia or ArgoUML.
- For some reason, if you decide to include non-HTML document in your project, use OpenOffice. It will enable you to publish the document in Microsoft Office and PDF formats. Do not use Microsoft Office or Front Page because many of us do not want to buy it.
Since CafeSip is developed in an open-source collaborative environment, we have not adopted a conventional water-fall style development process. Instead, our regular contributors use some of the principles laid out by various Agile Methodologies. In particular, the following principles are followed:
- Test-driven development: All projects must include automated tests that tests all aspects of the system automatically.
- Coding standards: Make sure the code follows the coding standard for the CafeSip project. Make sure that you follow all the conventions, directory structures, standard design patterns and specific design patterns used by the CafeSip project. A developer experienced in another CafeSip project must be completely at ease with your project.
- Simple design: There is no need to build a huge cathedral when all we need for now is a simple chapel. Keep the design simple. Do not spend a lot of time in designing the system keeping the “future” needs in mind. This does not mean that we do a hack job or do not design at all – we just don’t over-engineer.
- Refactoring: If we need to make changes to the code, go straight ahead. If you see some code that has got complicated over a period of time, go ahead and re-factor the code. If you see some bad code, feel free to clean it up. Make sure that all the automated tests pass after the re-factoring. Do not add comments to the code unless it is absolutely necessary (for example, add comments if you want to convey “some catches” to other developers). The only exception is when you want to document the design using Javadocs. Make sure that when you re-factor, the Javadoc is updated.
- Team communication: Have regular team meetings in the form of face-to-face meeting, telephone calls, chats and emails.
- Pair programming: Program and design in pairs whenever possible.If it is not possible, please make sure that you have discussed the design with your team lead or other members.