This talk will cover the work Facebook has done to become more involved with various upstream open source communities. We will start with why we believe it's important for companies to build strong relationships with the communities around the software they use - particularly in infrastructure. Next we will look at the steps we took to become better community citizens and finally we will discuss some case studies.
Specifics covered will include various projects we've contributed to, technical work such as back-porting various OS components from Rawhide to CentOS 7, benefits we've received and lessons learned.
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Building Better FLOSS Community Relationships @ FB
1. Building Better FLOSS
Community Relationships @ FB
DevConf.cz 2017
Phil Dibowitz & Davide Cavalca
Production Engineering: Operating Systems
Facebook
4. Agenda
● Open Source at Facebook
● Why do this?
● How do you do this?
● Our journey, via examples!
● Lessons Learned
5. Open Source @ Facebook
Open Source Team...
● Shepherds projects
● Builds tooling
● Provides guidance/input
6. Open Source @ Facebook
● Facebook started as a LAMP stack!
● HHVM
● MySQL
● Kernel
7. Open Source @ Facebook
● Hbase
– Forked early…
– Years later, opensource version:
● halved avg latency
● long tail latency reduced by > 90%
● single server failover times cut dramatically
●
Reduction in long GC pauses
– Now back to upstream – much work later
● Zookeeper
– Similar situation in progress
● Chef
– Have kept up with development and deployment
– Stayed entirely on open source release
– Great results for 4 years...
8. Open Source @ Facebook
We also develop our own open-source software in the
community...
● Presto
● OSQuery
● React
● RocksDB
● McRouter
● Buck
● Surround360 Processor
10. Why? It’s efficient!
● Maintain less internal code
– Less man-hours!
● Be able to contribute code
– Help community
– Share ownership
– Feel good
● More eyeballs (better code)
– More reviews
– More testing
11. Why? Less waste!
Keeping up with the community means…
● Less time wasted…
– Debugging solved problems
– Filing useless bugs
– Porting fixes around
● Less animosity
12. Why? Direction!
● Know what’s coming soon (... to a theater near
you)
– Be prepared
– Be part of that discussion
● Influence community direction (eventually)
– Start those discussions!
13. Why? People!
● Happier internal engineers
● More engaged community
● Better recruiting
● … good relationships are contagious!
15. How? In Person (where possible)
● Conferences
● Meet-ups
● Their office
● Your office
● Wherever!
16. How? Participation
● Be on mailing lists / in SLACK / on IRC
… and join in the conversation!
● (again) Go to relevant conferences/meetups
● Understand high level project goals
● Understand work flows
17. How? All the context!
● Listen first to get their context
● Provide your context before large PRs
● Remember: find appropriate medium for the
length and type of conversation
18. How? Determine speed
● Following “latest”
● What’s right for project?
– Consider their release cadence, dependencies,
development velocity, etc?
● What’s right for the time?
– Consider your resources, deployment cadence, and
rate of contribution you expect to make
22. A good example: Chef
● We’d already built a relationship with Chef
● … but we had a business relationship too.
● Goal: (initially) scaling, (later) various features
● Speed: custom bleeding edge builds early on… now
quarterly
● Got involved in community events and discussion
● Benefits: IPv6, multipackage, scaling, systemd support
● Also: released various tooling and cookbooks
23. A place to start: Anaconda
● Goal: Single installer across versions, use newer code
● Flew out to meet
– Started with: how to be good community members
– Ended in hackathon
● Kept in touch in IRC
● Speed: built from master ~monthly
● Benefits: single installer, vastly newer hardware support,
solid IPv6 support, not working in abandoned codebase
Davide
- note that we are not the only team that does this and lots of teams work well with the community throughout the company
Davide
Production Engineers: Operating Systems
- Centos
- bare metal experience
- provisioning
- chef
- packaging infra
- our customers: bare metal services, and middleware
Phil
Phil
HHVM
- PHP → HPHP → HHVM
- Continue to work with Zend and PHP community today!
MySQL
- Started sending upstream patches
- WebscaleSQL
- now our branch – still involved in community!
Kernel
- Significant performance improvements in UDP
- Growing kernel team
- Move to upstream kernel development
Davide
- Not always perfect...
Davide
Phil
Phil
Phil
Phil
Knowing what’s coming:
- systemd
- networkd
- dnf
Directoin:
- what you need
- use cases that others may use
Phil
Davide
Davide
Davide
Workflow:
- tools, testing, etc.
- which branches, how reviews work, their limitations
Davide
Davide
… to keep up well enough to provide meaningful contributions in both code and discussions.
Davide
Phil
Phil
Phil
Phil
Davide
Backport: GH + copr repo
Davide
Network-scripts:
- v6
- per interface routes
- whitespace cleanup (conversation!)
Rpm/yum/dnf
- had workarounds for issues @ scale with rpmdb
- would like to help bulletproof and test @ scale
Phil
Listen first:
- start the discussion with how to best contribute/be good members
- callback: anaconda
Their context:
- upstream may have additional processes/requirements
- callback: anaconda
Your context:
- provide context before major contributions **and** with it
- callback systemd(cgroup2), anaconda
- initscripts – WHY whitespace cleanup?