Open Source
Introduction
What is Open Source Software
- Code that is published publicly
- Created and maintained by a collaborative virtual community
- Anybody is allowed to use, modify and contribute back
Key Element
- Use: Anyone can run the software for any purpose
- View: Anyone can view the source code and understand the code
- Modify: Enhancements, bug fixes and solutions can come from anywhere
- Share: Collaboration between groups and individuals
Basic Terminology
- Community: A group of people who work together to create and maintain a project
- Contributor: A person who contributes to a project
- Committers: Folks who review and approve changes to a code base
- Code of conduct: A set of rules for a project
- Contributing guidelines: Describe how to contribute and collaborate
- Upstream: Forms the foundation or the source
- Downstream: Programmer's working stream
The Open Source Way
- Transparency
- Collaboration
- Deliver early and often
- Inclusion
- Community
Why Open Source Software matters
Benifits to Individuals
- Learning in the open
- Access to mentors
- Building eminence
- Hybrid is the new cloud
- More job options
Benifits to Enterprises
- Speed of innovation
- Potential Cost Savings
- Avoid vendor lock-in
- Interact directly with users
- Become aware of project roadmaps
- Keep pace with competitors
- Increase software security and reliability
- Enhance business agility and time to market
- Influence direction of technological development
Contributing
Choose an open source project
github.com/topics/<topic>
github.com/explore
up-for-grabs.net
goodfirstissue.com
codetriage.com
Before contribute
Understand how a project works
- README
- First file to be created
- Most visible in the project's repository
- Introduces and explains the project
- States what the project is about
- Contribution guidelines(CONTRIBUTING.md)
- Explain how to contribute
- Provide templates for bugs and feature requests
- Describe how to submit pull requests
- List work needed by maintainers
- Code of conduct
- Rules and expected behavior
- Enforcement
- Positive, healthy and respected feedback
- License
- Open Source licenses(LICENSES)
Ways to Contribute
- Code
- Report/fix bugs
- Add new features
- Update existing features
- Write tests
- Review code
- Documentation
- Writing and updating
- Fixing typos, grammar mistakes and formatting errors
- Creating examples and tutorials
- Translating documentation
- Advocate
- Write a blog post
- Share on social media
- Give talks or workshops
- Community
- Answer questions on forums and mailing lists
- Help moderate the discussion boards or conversation channels
- Organize workshops or meetups about the project
- Organize project conferences
Start Contributing
- Finding issues
github.com/<username>/<repo>/issues
- Regular meetings
- Discuss matters in the community
- Share new ideas and discussions
- Connect with one another
- Jupyter, Kubeflows and other tools
- Attend sprints
- Contribution sprints, developer days, coding nghts, unconferences and other events
- Work together to solve problems
- Learn, collaborate and expand network
- Code programs and contests
- Google Summer of Code, Hacktoon, CodeChef, etc.
Best practices
- Understand the community
- Be observant
- Learn the community rules
- Adhere to the code of conduct
- Be respectful
- Be kind
- Start small
- Start with small issues like documentation
- Build trust
- Code contribution
- Make sure your idea hasn't been discussed before
- Use documentation and issues for search
- Use project issues to start the conversation
- Use pull requests to work on the solution
- Read the project contribution guidelines
- Contribute clean code
- Communication
- Keep all communication in the open
- Use neutral terms
- Keep conversation friendly
- Use chat channels for small conversations
- Search in exsting issues and chat channels before starting a new one
- Code maintenance
- Be responsible for your code
- Maintain your code by reviewing it regularly
- Know the license
- Understand the license
- Understand the license's terms
- Understand company rules
- Find mentors in the community
Toolbox
Open Source Tools
- Version Control Systems
- Git
- Subversion
- Bug Trackers and Task Lists
- Jira Software
- GIthub Issues
- Communication Channels
- Package Management
- Testing and Debugging Tools
Start Project
Licensing
A license dictates how others can interact with open source projects.
A license is a legal agreement between a copyright holder and those who use their work.
- Copyleft License resctricts the right to use, modify and share creative works without the permission of the copyright holder holder
- General Public License (GPL)
- Mozilla Public License 2.0 (MPL)
- Permissive License allows the freedom to use, redistribute and modify the original code as well as derivative works
- MIT License
- BSD License
- Apache License 2.0
Warning
If you do not have a license in your project, it does not automatically mean the project is open source.
On the Contrary, each contributor has a right to their portion of the work.