DPS909 & OSD600 Fall 2017
Contents
Resources for DPS909 & OSD600
Week 1
- Some questions:
- What brought you to this course?
- When you hear "open source," what comes to mind?
- On a scale from 1 (not at all) to 5 (very)...
- How comfortable are you working with technology you've never seen before?
- How likely are you to stick with a problem when it gets hard to solve?
- How curious are you about how things work?
- How likely are you to ask for help when you get stuck?
- How likely are you to pause your own work in order to help someone else who is stuck?
- How comfortable are you as a writer?
- How self-motivated are you?
- How self-directed are you?
- How to have Success in this course:
- Willingness to be lost and not panic
- Willingness to put yourself out there, jump in
- Curiosity
- Being driven, persistence
- Willingness to ask for help
- Willingness to give others help
- Independent learning
- Doing more than the bare minimum
- Mozilla
- Browsers (Firefox, Servo)
- Languages (JavaScript, C++, Node, Python, Rust, CSS, HTML, ...)
- Tools (Dev Tools, DXR, build systems, automation)
- QA, Automated Tests
- Extensions
- Localization
- Documentation
- Accessibility
- Teaching and Learning (Thimble)
- Web technology
- Discussion
Week 2
- Let's talk about Copyright and Open Source Licenses
- IANAL: "I Am Not A Lawyer"
- We're going to explore licensing from the POV of a developer participating in open projects
- Copyright
- Who created it, "owns" it.
- Set of exclusive rights granted to the work's creator
- "The right to copy," to produce or reproduce a work or substantial portion thereof
- Copyright is automatic when a work is created, you don't have to register it.
- Copyright in Canada
- Copyright Guide
- In a software project, there can be many copyright holders (e.g., many contributors), or all contributors may assign their copyright to the project (e.g., CLA, which we'll cover later)
- Licenses
- Rights, privileges, responsibilities, etc. applicable to someone other than the work's creator
- "Terms and Conditions"
- These must be granted by a copyright holder
- No License
- What can you do with code you find that has no license?
- what can I, can't I do?
- Public Domain
- SQLite, which is now used by literally everybody, see http://www.sqlite.org/famous.html
- Unlicense
- Consider some proprietary/closed End User License Agreements (EULA)
- Open Source Licenses
- The Open Source Definition
- Approved licenses by the Open Source Initiative: https://opensource.org/licenses
- Choose a License: https://choosealicense.com/
- Learning Licenses: BSD
- Family of Licenses, including 2-Clause BSD, 3-Clause BSD (aka New BDS), 4-Clause BSD
- "Why you should use a BSD style license for your Open Source Project"
- BSD Licenses code is usually compatible with other open/closed code, when you want to mix them.
- Example software projects licensed under the BSD License:
- Summary:
- You need to retain the license and copyright notice
- You can use it commercially or non-commercially (privately)
- You can distribute it freely
- You can modify it freely
Week 3
- Learning Licenses: MIT
- MIT License
- One of the most widely used licenses in Open Source
- Like the BSD License, nothing about patents (created before software was patentable in the US)
- Example software projects licensed under the BSD License:
- What is a bug?
- Unit of Work in Open Source
- Many projects have lots of bugs
- Steps To Reproduce (STR)
- Metadata (OS, versions, other context)
- Issue vs. Pull Request
- Labels
- Let's look at some bugs
- Some interesting example bugs:
- Internationalize Best Resume Ever
- An example of a good-first-bug in DevTools
- Recent Firefox fix for nsCursor(-1)
- Dead code removal in FlacFrameParser::DecodeHeaderBlock
- Hostile bugs filed by angry users. cf. Bug Etiquette, Bug Writing Guidelines
- Dealing with the iPhone X "notch" in CSS standard, see examples
- RESOLVED WONTFIX
- Bug Triage. Example bug that needs Triage.
- "Good First Bug"
- Write a Blog post: read MIT License followed by The MIT License, Line by Line, and blog about 3 things you learned or found interesting, which perhaps differed from what you understood in your own reading of the license.
- Lab 3
Week 4
- Facebook, React, Apache, BSD+Patents, MIT
- Mozilla
- Started in 1998 by former Netscape employees, see Code Rush documentary
- Mozilla Public License (MPL) (in plain English)
- Mozilla Manifesto
- MDN
- Bugzilla
- Mozilla@GitHub
Week 5
- Register for FSOSS 2017 at table outside CS office at lunch time. $25 per student, includes lunch + swag.
- 0.1 Release
- Advice: you have to make things happen
- If you don't have your bugs assigned yet, please come see me, talk to me on Slack, or email me ASAP.
- Make sure you have reached out to the community around your bugs (irc, Slack, Mattermost, GitHub, mailing list, etc.)
- Please add all your bugs/pull requests to DPS909 & OSD600 Fall 2017 Bug List
- Help one another, learn from one another, inspire one another: Dan Epstein, Michael Pierre, Sean Prashad, Azusa Shimazaki, Jiel Selmani
- Learning Licenses: GPL
- Free Software, FSF, GNU
- Copyleft, compare to permissive licenses like BSD, MIT
- "Copyleft thus uses copyright law to accomplish the opposite of its usual purpose: instead of imposing restrictions, it grants rights to other people, in a way that ensures the rights cannot subsequently be taken away." Wikipedia
- GPL License
- Key Ideas
- Free to use, modify (see below), redistribute, study, copy
- Binary distributions must also make source code available (e.g., Linksys, BMW)
- You can modify GPL code and not publish your changes. But if you release your modified binary, you must make source available.
- You can sell GPL licensed code, and so can anyone else.
- You can't sublicense GPL code: it has to stay GPL
- GPL3 is more compatible with other open licenses than GPL2
- Example software projects licensed under the GPL Licenses:
- Introducing git
- Readings/Resources
Week 6
- Register for FSOSS 2017 at table outside CS office at lunch time. $25 per student, includes lunch + swag.
- 0.1 Release due in a few weeks (Oct 20)
- Please add all your bugs/pull requests to DPS909 & OSD600 Fall 2017 Bug List
- Work on your bugs, ask for help, help each other. Don't wait for things to happen, make them happen.
- Git and GitHub Workflow
- Fork the project's repo. We'll refer to this as the upstream repo.
- Clone your Fork'ed repo locally. We'll refer to this as your origin (see below).
git clone <git-url>
- Add a remote for the upstream repo:
git remote add upstream <git-url>
- Confirm your remotes (you will need origin and upstream):
git remote -v
- Setup your dev environment (e.g.,
npm install
,pip install ...
, build, etc.). - Switch to your master branch:
git checkout master
- Update your master branch with what's on the upstream repo's master:
git pull upstream master
- Create a branch (sometimes called a Topic Branch) for your current work. Every bug, every experiment, everything you do gets its own branch:
git checkout -b branch-name master
- Fix your code, add and commit your work on your topic branch:
git commit -m "Fixing ..."
- Push your branch to your origin:
git push origin <branch-name>
- Create a Pull Request (PR) against the upstream repo on GitHub. If you're fixing a bug (e.g., Issue 1234) say that in the description:
Fixing #1234: ...
. Make sure you write a nice description of the fix, and how to test/confirm it. - Fix any issues you hear back from reviewers by editing your branch, add, commit, and push again to the same branch on your origin:
git push origin <branch-name>
. Your changes will get added to the pull request - Communicate with the reviewers and let them know what you've done:
I fixed x, y, and z. Please review this again
. - Repeat until you fix all the issues they find in your code.
- Once they merge your branch, you can go back to your master and pull in those changes. You won't ever merge into master manually.
Week 7
- Changes to Semester
- Removal of Release 0.3 from Graded Work. You will only be expected to complete two releases instead of three: 0.1 and 0.2.
- Grading will now be as follows:
- Release 0.1 - 35% (up from 25%)
- Release 0.2 - 35% (up from 25%)
- Blog - 15% (no change)
- Labs - 15% (up from 10%)
- Due Dates
- Release 0.1 due by Tues Nov 28
- Release 0.2 and any outstanding Labs due by midnight Fri Jan 5th
- Revised Class schedule:
- Tues Dec 19, final in-class session together
- Thurs Dec 21, final on-line lab
- Jan 2-5, no formal class time together. Complete outstanding labs, release work. I'll be available online only via Slack, Email, GitHub, etc.
- TODO
- Complete and Submit 0.1 Release by next Tues Nov 28th.
- Update DPS909 & OSD600 Fall 2017 Bug List with any new bugs you've done since we were apart
- Start thinking about/taking to Dave about what you'll do for your second release. We'll discuss next week.
- Three Questions:
- What's a victory you've had already? Bug you fixed? Project you contributed to? Tech you mastered? Something you learned that used to be hard?
- What's something you're finding tricky? Something we should cover in class? Something you have to do for a bug, a tool that you don't fully understand, an issue with some process?
- What's an open source goal you have for yourself before the end of term? Project you want to contribute to? Technique you want to master? Community you want to join? Something you want to learn/accomplish?
- Continuous Integration (CI)
- Automate and Test everything
- Have bots integrate, verify, and test all parts of a project every time you make a change. For both large and small changes.
- Revert changes that "break the build"
- Produce "nightly" or "staging" style build artifacts the community can test against
- Automate deployment tasks per commit
- Make it less painful for a large community to work on the same code without sacrificing stability.
- Open Source CI
- Most projects use one of TravisCI, CircleCI, AppVeyor, etc.
- https://twitter.com/kelseyhightower/status/932654629648719872 - there is no one right way to do this, just a million variations you'll encounter in the wild.
- Free for Open Source Projects
- Integrates with GitHub, build per commit or pull request, reports back to GitHub PRs.
- Used for Building, Testing, Linting, and Deployment
- TravisCI
- See Getting Started and Core Concepts
- You need an automated setup, build, and test system for your project.
- Create an Account with TravisCI and Enable an Integration for your GitHub repo.
- TravisCI is configured for a project via a travis.yml file
- The travis.yml file tells TravisCI how to setup a virtual container to build/test your code, and which steps to use in order to determine if things are working
- Example 1: Thimble
- Example 2: Activity Stream
- Example 3: Firefox JavaScript Debugger