28
Building Better FLOSS Community Relationships @ FB DevConf.cz 2017 Phil Dibowitz & Davide Cavalca Production Engineering: Operating Systems Facebook

Building Better FLOSS Community Relationships @ FB

Embed Size (px)

Citation preview

Page 1: Building Better  FLOSS Community Relationships @ FB

Building Better FLOSSCommunity Relationships @ FB

DevConf.cz 2017Phil Dibowitz & Davide Cavalca

Production Engineering: Operating SystemsFacebook

Page 2: Building Better  FLOSS Community Relationships @ FB

Disclaimer:

Lots of teams at Facebook work withopensource and are awesome at it!

Page 3: Building Better  FLOSS Community Relationships @ FB

Who are you two and why do we care?

Page 4: Building Better  FLOSS Community Relationships @ FB

Agenda

● Open Source at Facebook● Why do this?● How do you do this?● Our journey, via examples!● Lessons Learned

Page 5: Building Better  FLOSS Community Relationships @ FB

Open Source @ Facebook

Open Source Team...● Shepherds projects● Builds tooling● Provides guidance/input

Page 6: Building Better  FLOSS Community Relationships @ FB

Open Source @ Facebook

● Facebook started as a LAMP stack!● HHVM● MySQL● Kernel

Page 7: Building Better  FLOSS Community Relationships @ FB

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...

Page 8: Building Better  FLOSS Community Relationships @ FB

Open Source @ Facebook

We also develop our own open-source software in the community...

● Presto● OSQuery● React● RocksDB● McRouter● Buck● Surround360 Processor

Page 9: Building Better  FLOSS Community Relationships @ FB

Why Build Relationships?

Page 10: Building Better  FLOSS Community Relationships @ FB

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

Page 11: Building Better  FLOSS Community Relationships @ FB

Why? Less waste!

Keeping up with the community means…● Less time wasted…

– Debugging solved problems

– Filing useless bugs

– Porting fixes around

● Less animosity

Page 12: Building Better  FLOSS Community Relationships @ FB

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!

Page 13: Building Better  FLOSS Community Relationships @ FB

Why? People!

● Happier internal engineers● More engaged community● Better recruiting

● … good relationships are contagious!

Page 14: Building Better  FLOSS Community Relationships @ FB

How?

Build Social Capital

Page 15: Building Better  FLOSS Community Relationships @ FB

How? In Person (where possible)

● Conferences● Meet-ups● Their office● Your office● Wherever!

Page 16: Building Better  FLOSS Community Relationships @ FB

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

Page 17: Building Better  FLOSS Community Relationships @ FB

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

Page 18: Building Better  FLOSS Community Relationships @ FB

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

Page 19: Building Better  FLOSS Community Relationships @ FB

How? Finally

Be Honest

Page 20: Building Better  FLOSS Community Relationships @ FB

Our journey, by example

Page 21: Building Better  FLOSS Community Relationships @ FB

Common Considerations

● Goal● Speed● Size of change● Previous engagements with the community

Page 22: Building Better  FLOSS Community Relationships @ FB

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

Page 23: Building Better  FLOSS Community Relationships @ FB

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

Page 24: Building Better  FLOSS Community Relationships @ FB

Continuing the Journey: systemd

● CentOS 7● Goal: newer features/code, cgroup2● Speed: latest release● Backported (rawhide to CentOS 7) – shared● Conferences● Benefits: cgroup2, mkosi, etc.

Page 25: Building Better  FLOSS Community Relationships @ FB

Other Examples

● initscripts/network-scripts– IPv6 fixes & features

– Per-device routes

– Re-whitespace

● rpm/yum/dnf– rpmdb scaling issues

– want to help test at scale

Page 26: Building Better  FLOSS Community Relationships @ FB

Lessons Learned

● Listen first & understand their context● Provide your context● Non-code contributions

Page 27: Building Better  FLOSS Community Relationships @ FB

Resources

● Rawhide → CentOS 7 backports– Github: https://github.com/facebookincubator/rpm-backports

– (RH) Copr: https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/

● Kernel blog post– https://code.facebook.com/posts/938078729581886/improving-the-linux-kernel-with-upstream-contributions/

● Systemd talk– https://www.youtube.com/watch?v=LhYd0S3qiMY

● Chef Tooling:– https://github.com/facebook/taste-tester

– https://github.com/facebook/grocery-delivery

– https://github.com/facebook/chef-cookbooks

● MySQL: https://github.com/facebook/mysql-5.6/● HHVM: http://hhvm.com/● Presto: https://prestodb.io/● RocksDB: http://rocksdb.org/

Page 28: Building Better  FLOSS Community Relationships @ FB

You’ve got questions?

We’ve got answers!(maybe)