From 1f570ea1b9246161554b759d65d980ca0e761653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20=28Gentle=29=20Y=E6=9D=A8?= Date: Tue, 5 Nov 2024 23:39:04 +0800 Subject: [PATCH] Translate Guides into Chinese - new PR (#499) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update create-program.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * Update impact.md Translate the whole content of this chapter well Signed-off-by: Nliver <34496563+Nliver@users.noreply.github.com> * delete english content Signed-off-by: Chen Yong * Update participating.md Signed-off-by: Chris (Gentle) Y杨 * Update os-commercial-ecosystem.md Signed-off-by: Chris (Gentle) Y杨 * Update search.md Signed-off-by: Chris (Gentle) Y杨 * Update impact.md Signed-off-by: Chris (Gentle) Y杨 * Update outbound-oss.md Signed-off-by: Chris (Gentle) Y杨 * translated by Teri Zhao Signed-off-by: terizhao * Update shutting-down.md Chinese translation v1 for shutting-down.md Signed-off-by: arnuojo * Update meetings.md info Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Fix link to employee engagement guide Link to file where the guide is located in repo instead of the old pull request Signed-off-by: Cornelius Schumacher * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update iframe embed url for lanscape view at todo website [OSPO Landscape has migrated to a new view](https://github.com/todogroup/ospolandscape/issues/193) and now the url for iframes follows a different structure. Before the DNS switch available at: https://ospo.landscape2.io/embed-setup, after at https://landscape.todogroup.org/embed-setup This PR updates the iframe embed url so the member organizations can be seen Signed-off-by: Ana Jimenez Santamaria * Update todo_group_members.html Signed-off-by: Ana Jimenez Santamaria * Update todo_group_members.html Signed-off-by: Ana Jimenez Santamaria * Update todo_associates.html Signed-off-by: Ana Jimenez Santamaria * Create ospo-landscape2-view.md Signed-off-by: Ana Jimenez Santamaria * Update ospo-landscape2-view.md Signed-off-by: Ana Jimenez Santamaria * Update ospo-landscape2-view.md Signed-off-by: Ana Jimenez Santamaria * Update ospo-landscape2-view.md Signed-off-by: Ana Jimenez Santamaria * add new ospo landscape view in png Signed-off-by: Ana Jimenez Santamaria * Update index.html to change landscape image location Signed-off-by: Ana Jimenez Santamaria * Update index.html Signed-off-by: Ana Jimenez Santamaria * Add files via upload Signed-off-by: Ana Jimenez Santamaria * Create ospology-apeldoorn-summary.md Signed-off-by: Ana Jimenez Santamaria * Update ospology-apeldoorn-summary.md Signed-off-by: Ana Jimenez Santamaria * Update ospology-apeldoorn-summary.md Signed-off-by: Ana Jimenez Santamaria * Update steering committee 2024 members in SC page Signed-off-by: Ana Jimenez Santamaria * Update steering-committee.md Signed-off-by: Ana Jimenez Santamaria * Update steering-committee.md Signed-off-by: Ana Jimenez Santamaria * Update steering-committee.md Signed-off-by: Ana Jimenez Santamaria * Update steering-committee.md Signed-off-by: Ana Jimenez Santamaria * Fix URL for UCSC in university.md Signed-off-by: Shu Muto * Fix markdown Signed-off-by: Cornelius Schumacher * Update osponews.md with new entries Signed-off-by: Ana Jimenez Santamaria * Update osponews.md Signed-off-by: Ana Jimenez Santamaria * [zh] Translate a guide: os-commercial-ecosystem.md Signed-off-by: windsonsea * apply suggestions from hwang37 Signed-off-by: windsonsea * Update shutting-down.md update some detials (such as from "您" to “你”) Signed-off-by: arnuojo * Update shutting-down.md Fix TYPO Signed-off-by: arnuojo * Update participating.md 第13章 Participating in open source communities 参与开源社区 Signed-off-by: 周黎 <113668982+coolzhouly@users.noreply.github.com> * test notify reviewers Signed-off-by: Zhao Zhenhua * 5.22 翻译内容 Signed-off-by: Zhao Zhenhua * management tools, finished half Signed-off-by: Zhao Zhenhua * complete the translation of management-tools.md Signed-off-by: Zhao Zhenhua * Create 2024-osposurvey-call-for-feedback.md Signed-off-by: Ana Jimenez Santamaria * Update 2024-osposurvey-call-for-feedback.md Signed-off-by: Ana Jimenez Santamaria * Update 2024-osposurvey-call-for-feedback.md Signed-off-by: Ana Jimenez Santamaria * Update 2024-steering-committee.md company affiliation Signed-off-by: Annania Melaku * Internationalize the links on the homepage to point to appropriate subpages Signed-off-by: Chris Abraham * Update events.md Signed-off-by: Ana Jimenez Santamaria * Update events.md Signed-off-by: Ana Jimenez Santamaria * Added more community calendars to Meetings page Signed-off-by: Chris Abraham * Update layouts/shortcodes/todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * Update layouts/shortcodes/todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * Update layouts/shortcodes/todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * Update layouts/shortcodes/todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * fix typos in todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * create todo community calendar iframe shortcode create community calendar to differentiate the other calendars vs todo Signed-off-by: Ana Jimenez Santamaria * Update todo_community_calendars.html Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update todo_community_calendar.html Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * Update meetings.md Signed-off-by: Ana Jimenez Santamaria * inlcude calendar title in meetings page Signed-off-by: Ana Jimenez Santamaria * Create associates-lfapac-ospo-sig.md Signed-off-by: Ana Jimenez Santamaria * Update todo_community_calendar.html Signed-off-by: Ana Jimenez Santamaria * Create todo-community.md Traslate todo-community.md into Japanese. Signed-off-by: Shu Muto * Create whom-is-this-group-for.md Signed-off-by: Shu Muto * Update whom-is-this-group-for.md Translate tile to Japanese. Signed-off-by: Shu Muto * Update whom-is-this-group-for.md Fix typo Signed-off-by: Shu Muto * Create steering-committee-elected.md Translate en/steering-committee-elected.md Signed-off-by: Shu Muto * Create get-updates.md Translated get-updates Signed-off-by: Shu Muto * Create benefits.md Also, translate it into Japanese Signed-off-by: Shu Muto * Create government-institution.md translate to Japanese Signed-off-by: Shu Muto * Create should-i-join.md Translate should-i-join.md into Japanese. Signed-off-by: Shu Muto * Update should-i-join.md Translate title of should-i-join.md into Japanese. Signed-off-by: Shu Muto * Create get-involved.md Translate get-involved.md into Japanese. Signed-off-by: Shu Muto * Create which-organisations.md Translated into Japanese. Signed-off-by: Shu Muto * Update which-organisations.md Translated into Japanese. Signed-off-by: Shu Muto * Create communication-channels.md this issue will be done. Signed-off-by: Shu Muto * Update content/ja/faq/communication-channels.md Co-authored-by: ziyi-xie <92832323+ziyi-xie@users.noreply.github.com> Signed-off-by: Shu Muto * Create open-source-foundation.md translate it into Japanese Signed-off-by: Shu Muto * Update content/ja/faq/open-source-foundation.md Co-authored-by: ziyi-xie <92832323+ziyi-xie@users.noreply.github.com> Signed-off-by: Shu Muto * Create university.md Translate from English to Japanese Signed-off-by: Shu Muto * Update content/ja/faq/university.md Co-authored-by: ziyi-xie <92832323+ziyi-xie@users.noreply.github.com> Signed-off-by: Shu Muto * Update content/ja/faq/university.md Co-authored-by: ziyi-xie <92832323+ziyi-xie@users.noreply.github.com> Signed-off-by: Shu Muto * Create deliverables.md Translation will be done in the future Signed-off-by: Shu Muto * Update deliverables.md Signed-off-by: Shu Muto * Translate deliverables.md into Japanese Signed-off-by: Shu Muto * Translate _index.md into Japanese Signed-off-by: Shu Muto * Add FAQs menu for Japanese and fix URL Signed-off-by: Shu Muto * Fix variations in words Signed-off-by: Shu Muto * Fix URL for FAQs Signed-off-by: Shu Muto * Updated submodule to the latest version of dot-org-hugo-theme Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * Fix typo in readme Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * Add theme update instructions to readme Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * Fix change to languages params for new version of Hugo Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * Update all packages, upgrade to latest Hugo for Netlify build Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * Remove custom breadcrumb as theme breadcrumb now works properly Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * #398 Updating copyright message Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> * add next thursday touchpoint call details Signed-off-by: Ana Jimenez Santamaria * Update ambassadors.md Signed-off-by: Ana Jimenez Santamaria * done by Teri Zhao Signed-off-by: terizhao * address Zhentao's comments Signed-off-by: terizhao * Translate content/zh-CN/guides/marketing-open-source-projects.md Fixes todogroup.org#9 Signed-off-by: Hongbo WANG * test Signed-off-by: Hongbo Wang * test2 + test3 Signed-off-by: Hongbo Wang * Revert "Translate content/zh-CN/guides/marketing-open-source-projects.md" This reverts commit b26a483441cdb7e7f5612529561a2321a7361397. Signed-off-by: Hongbo Wang * Revert "Revert "Translate content/zh-CN/guides/marketing-open-source-projects.md"" This reverts commit 34a95d0f457e42d35233d24228372f1cd1a3e96c. * Revert "test2 + test3" This reverts commit 85eb4bd66a2fbd47ac9fdcee51c30b8842347e72. * content/zh-CN/guides/marketing-open-source-projects.md Repalce term "Yingxiao" with "Tuiguang" in file according to review comments. Reviewed-by: Chris Yang Signed-off-by: Hongbo WANG * content/zh-CN/guides/marketing-open-source-projects.md Updated according to review comments. Reviewed-by: Chris Yang Signed-off-by: Hongbo WANG * correct according comments. Signed-off-by: Zhao Zhenhua * Update strategy.md Translation version of strategy.md Signed-off-by: arnuojo * delete action Signed-off-by: Zhao Zhenhua * English has been removed. Signed-off-by: maotiamo * Update todo-guides-contribution-guidelines.md finish proofreading Signed-off-by: bingfeng <89500827+winterpi@users.noreply.github.com> * First Version. Signed-off-by: maotiamo * First Version. Signed-off-by: maotiamo * First Commit. Signed-off-by: maotiamo * The revisions were made based on the review comments. Signed-off-by: maotiamo * Revised based on the comments. Signed-off-by: maotiamo * Update todo-contribution-guidelines.md TODO OSPO Case study Guidelines.md Signed-off-by: arnuojo * Update todo-contribution-guidelines.md update based on terizhao's comment Signed-off-by: arnuojo * Version 1.0 of translation. Signed-off-by: maotiamo * Maintain consistency in translation content. Signed-off-by: maotiamo * Revised! Signed-off-by: maotiamo * Translating. Signed-off-by: maotiamo * The second commit. Signed-off-by: maotiamo * The third commit. Signed-off-by: maotiamo * complete. Signed-off-by: maotiamo * ready to pull request. Signed-off-by: maotiamo * 针对审阅意见,进行了翻译调整。 Signed-off-by: maotiamo * According to the comments from Yang changed and updated from Yang Signed-off-by: wangleo61 <62591087+wangleo61@users.noreply.github.com> * translate create-program.md Signed-off-by: terizhao * address review comments on create-program.md Signed-off-by: terizhao * address open source program and open source project translation Signed-off-by: terizhao * Update create-program.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * 引言和标题翻译 Signed-off-by: Chen Yong * Update 开源活动指南 Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * Update organizing-and-managing-open-source-events.md Signed-off-by: Chen Yong * review-change_to _organizing-and-managing-open-source-events.md Signed-off-by: Zhou Ran <100081310+JuliaZhou2022@users.noreply.github.com> * delete english content Signed-off-by: Chen Yong * Update participating.md Signed-off-by: Chris (Gentle) Y杨 * Update os-commercial-ecosystem.md Signed-off-by: Chris (Gentle) Y杨 * Update search.md Signed-off-by: Chris (Gentle) Y杨 * Update impact.md Translate the whole content of this chapter well Signed-off-by: Nliver <34496563+Nliver@users.noreply.github.com> * Update impact.md Signed-off-by: Chris (Gentle) Y杨 * Update outbound-oss.md Signed-off-by: Chris (Gentle) Y杨 * Add scripts to run hugo in docker Signed-off-by: Shu Muto * Fix typo and git submodule command Signed-off-by: Shu Muto * Updated submodule to the latest version of dot-org-hugo-theme Signed-off-by: Shu Muto * Update slack invite link Signed-off-by: Ana Jimenez Santamaria * Create launch-2024-ospo-survey.md Signed-off-by: Ana Jimenez Santamaria * Update launch-2024-ospo-survey.md Signed-off-by: Ana Jimenez Santamaria * Update launch-2024-ospo-survey.md Signed-off-by: Ana Jimenez Santamaria * fix typo Signed-off-by: Ana Jimenez Santamaria * Update diversity-inclusion.md Signed-off-by: Chris (Gentle) Y杨 * Update career-development.md Signed-off-by: Chris (Gentle) Y杨 * Update outbound-oss.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * Update whitepaper-guidelines.md Signed-off-by: Chris (Gentle) Y杨 * Update ospo-simple-faq.md to fix build issue Signed-off-by: Chris (Gentle) Y杨 * Update diversity-inclusion.md to fix build issue Signed-off-by: Chris (Gentle) Y杨 * Update career-development.md to fix build issue Signed-off-by: Chris (Gentle) Y杨 * Update outbound-oss.md to fix build issue Signed-off-by: Chris (Gentle) Y杨 * Update title to English to adapte URL escaping Signed-off-by: Chris (Gentle) Y杨 * Update building-leadership.md to adapte URI escaping Signed-off-by: Chris (Gentle) Y杨 * Update career-development.md Signed-off-by: Chris (Gentle) Y杨 * Update diversity-inclusion.md Signed-off-by: Chris (Gentle) Y杨 * Update impact.md Signed-off-by: Chris (Gentle) Y杨 * Update management-tools.md Signed-off-by: Chris (Gentle) Y杨 * Update marketing-open-source-projects.md Signed-off-by: Chris (Gentle) Y杨 * Update measuring.md Signed-off-by: Chris (Gentle) Y杨 * Update open-source-reading-list.md Signed-off-by: Chris (Gentle) Y杨 * Update organizing-and-managing-open-source-events.md Signed-off-by: Chris (Gentle) Y杨 * Update os-commercial-ecosystem.md Signed-off-by: Chris (Gentle) Y杨 * Update ospo-simple-faq.md Signed-off-by: Chris (Gentle) Y杨 * Update outbound-oss.md Signed-off-by: Chris (Gentle) Y杨 * Update participating.md Signed-off-by: Chris (Gentle) Y杨 * Update recruiting-developers.md Signed-off-by: Chris (Gentle) Y杨 * Update shutting-down.md Signed-off-by: Chris (Gentle) Y杨 * Update starting.md Signed-off-by: Chris (Gentle) Y杨 * Update strategy.md Signed-off-by: Chris (Gentle) Y杨 * Update todo-contribution-guidelines.md Signed-off-by: Chris (Gentle) Y杨 * Update todo-guides-contribution-guidelines.md Signed-off-by: Chris (Gentle) Y杨 * Update using-open-source.md Signed-off-by: Chris (Gentle) Y杨 * Update whitepaper-guidelines.md Signed-off-by: Chris (Gentle) Y杨 * Revert "Update building-leadership.md to adapte URI escaping " This reverts commit 734e25d0e6a84f1cb057e7777241d5f12fd688e4. * Revert "Update whitepaper-guidelines.md" This reverts commit de40965d63153d3543874cdd4a42f97fe832df70. * Revert "Update todo-contribution-guidelines.md" This reverts commit 3b4716068116275ef625cc21290f79128e1fd68f. * Revert "Update using-open-source.md" This reverts commit 00b2989c42e7acb186453f261c3172d04a668d20. * Revert "Update todo-guides-contribution-guidelines.md" This reverts commit 7d4ade066615c82a264111a002ba6dd34f2c75a7. * Revert "Update strategy.md" This reverts commit a19a65aff4964aa79348bcfa2138137c81424fbc. * Revert "Update starting.md" This reverts commit 4f1111da49badbea57655fa5723130465b9e53e2. * Revert "Update shutting-down.md" This reverts commit f562766b21174953dcf2ccf702a86b934867f2d2. * Revert "Update recruiting-developers.md" This reverts commit 8714d47eb57d1892e33d59c1ae21ac6926b9fa92. * Revert "Update participating.md" This reverts commit 8f97e95de555742c0068bc8d774da7fe7bb0369c. * Revert "Update outbound-oss.md" This reverts commit e0131d5bcd7b73be5bd50facc2b91c217e24d1c9. * Revert "Update ospo-simple-faq.md" This reverts commit bd3265369ebbebbf8b09df8bbbe80394b9c82c19. * Revert "Update open-source-reading-list.md" This reverts commit 94213d9de0da37a164ff1a53599e79395d2e4923. * Revert "Update measuring.md" This reverts commit a6a848b7c6716ba54761507460317582c52b8662. * Revert "Update marketing-open-source-projects.md" This reverts commit 9ed99177df1ecca938058a71781e7eccb1b8b7e6. * Revert "Update management-tools.md" This reverts commit 0b9db96f906c792ebd0bd8e6bdfaa951ea43b5e0. * Revert "Update impact.md" This reverts commit 13081f7cb3877d5d9af3f13cb4f4bd4a71eaf6c1. * Revert "Update diversity-inclusion.md" This reverts commit e1372acc9ba089e2bf8997d82cddef7d873ff4c0. * Revert "Update career-development.md" This reverts commit dae04915f360bc4648cbbae429ec6cdd43a7c9fd. * Revert "Update title to English to adapte URL escaping" This reverts commit c33ad24c6e65c1923de44d8117b06c86ec74e736. * Revert "Update os-commercial-ecosystem.md" This reverts commit 46f0b92a777ac58716cbdb3c8a64a88791fa7cbf. * Update organizing-and-managing-open-source-events.md Signed-off-by: Chris (Gentle) Y杨 --------- Signed-off-by: Chris (Gentle) Y杨 Signed-off-by: Nliver <34496563+Nliver@users.noreply.github.com> Signed-off-by: Chen Yong Signed-off-by: terizhao Signed-off-by: arnuojo Signed-off-by: Ana Jimenez Santamaria Signed-off-by: Cornelius Schumacher Signed-off-by: Shu Muto Signed-off-by: windsonsea Signed-off-by: 周黎 <113668982+coolzhouly@users.noreply.github.com> Signed-off-by: Zhao Zhenhua Signed-off-by: Annania Melaku Signed-off-by: Chris Abraham Signed-off-by: James Hunt <10615884+thetwopct@users.noreply.github.com> Signed-off-by: Hongbo WANG Signed-off-by: Hongbo Wang Signed-off-by: maotiamo Signed-off-by: bingfeng <89500827+winterpi@users.noreply.github.com> Signed-off-by: wangleo61 <62591087+wangleo61@users.noreply.github.com> Signed-off-by: Zhou Ran <100081310+JuliaZhou2022@users.noreply.github.com> Signed-off-by: node Co-authored-by: Nliver <34496563+Nliver@users.noreply.github.com> Co-authored-by: Chen Yong Co-authored-by: terizhao Co-authored-by: arnuojo Co-authored-by: Ana Jimenez Santamaria Co-authored-by: Cornelius Schumacher Co-authored-by: Shu Muto Co-authored-by: windsonsea Co-authored-by: 周黎 <113668982+coolzhouly@users.noreply.github.com> Co-authored-by: Zhao Zhenhua Co-authored-by: Annania Melaku Co-authored-by: Chris Abraham Co-authored-by: liumiiin Co-authored-by: Igarashi Kenta <103247277+i-kenta@users.noreply.github.com> Co-authored-by: shogo-katada <164866905+shogo-katada@users.noreply.github.com> Co-authored-by: sugiyama-m-v <164494452+sugiyama-m-v@users.noreply.github.com> Co-authored-by: s-uramoto <164879171+s-uramoto@users.noreply.github.com> Co-authored-by: s-kazuyoshi <73943905+s-kazuyoshi@users.noreply.github.com> Co-authored-by: natsuki-takase <163977913+natsuki-takase@users.noreply.github.com> Co-authored-by: taka-takeuchi <164862359+taka-takeuchi@users.noreply.github.com> Co-authored-by: k-hiraiwa <163966246+k-hiraiwa@users.noreply.github.com> Co-authored-by: y-ksmt-01 <163976093+y-ksmt-01@users.noreply.github.com> Co-authored-by: ziyi-xie <92832323+ziyi-xie@users.noreply.github.com> Co-authored-by: ogura-kei <119018813+ogura-kei@users.noreply.github.com> Co-authored-by: kinpara-s <163976253+kinpara-s@users.noreply.github.com> Co-authored-by: James Hunt <10615884+thetwopct@users.noreply.github.com> Co-authored-by: Hongbo Wang, from Intel Co-authored-by: Hongbo Wang Co-authored-by: maotiamo Co-authored-by: bingfeng <89500827+winterpi@users.noreply.github.com> Co-authored-by: wangleo61 <62591087+wangleo61@users.noreply.github.com> Co-authored-by: Zhou Ran <100081310+JuliaZhou2022@users.noreply.github.com> --- content/zh-CN/guides/building-leadership.md | 243 +++-- content/zh-CN/guides/career-development.md | 285 +++--- content/zh-CN/guides/create-program.md | 318 +++--- content/zh-CN/guides/diversity-inclusion.md | 172 ++-- content/zh-CN/guides/impact.md | 267 +++--- content/zh-CN/guides/management-tools.md | 299 +++--- .../guides/marketing-open-source-projects.md | 244 ++--- content/zh-CN/guides/measuring.md | 391 ++++---- ...anizing-and-managing-open-source-events.md | 719 ++++++-------- .../zh-CN/guides/os-commercial-ecosystem.md | 199 ++-- content/zh-CN/guides/ospo-simple-faq.md | 24 +- content/zh-CN/guides/outbound-oss.md | 907 +++++++++--------- content/zh-CN/guides/participating.md | 249 +++-- content/zh-CN/guides/recruiting-developers.md | 282 +++--- content/zh-CN/guides/shutting-down.md | 168 ++-- content/zh-CN/guides/strategy.md | 316 +++--- .../guides/todo-contribution-guidelines.md | 87 +- .../todo-guides-contribution-guidelines.md | 4 +- content/zh-CN/guides/whitepaper-guidelines.md | 60 +- content/zh-CN/search.md | 6 +- static/img/guides/outbound-oss1-t.png | Bin 0 -> 331893 bytes static/img/guides/outbound-oss2-t.png | Bin 0 -> 39781 bytes static/img/guides/outbound-oss3-t.png | Bin 0 -> 16789 bytes static/img/guides/outbound-oss4-t.png | Bin 0 -> 76995 bytes 24 files changed, 2639 insertions(+), 2601 deletions(-) mode change 100644 => 100755 content/zh-CN/guides/outbound-oss.md create mode 100644 static/img/guides/outbound-oss1-t.png create mode 100644 static/img/guides/outbound-oss2-t.png create mode 100644 static/img/guides/outbound-oss3-t.png create mode 100644 static/img/guides/outbound-oss4-t.png diff --git a/content/zh-CN/guides/building-leadership.md b/content/zh-CN/guides/building-leadership.md index fa7db210..2ae15d03 100644 --- a/content/zh-CN/guides/building-leadership.md +++ b/content/zh-CN/guides/building-leadership.md @@ -1,246 +1,243 @@ --- -title: Building leadership in an open source community +title: 建立开源社区的领导力 --- -Integrating into open source communities takes time and effort and requires a new approach to product development. Where traditional, proprietary development requires secrecy and a management hierarchy, open source development requires openness and values consensus. Code contributions, not title or position, are what determine influence and technical direction in an open source project. +融入开源社区需要时间和努力,需要采用新的产品开发方法。传统的专有开发需要保密和管理层级,而开源开发则需要开放和价值共识。在开源项目中,影响力和技术方向是由代码贡献决定的,而不是职称或职位。 -Open source projects are developed in diverse and geographically dispersed communities that have their own rules, conventions, tools, and processes. Simply put, each community has its own unique culture and it takes time to establish the trust, ways of collaborating, and cultural understanding required to be effective in open source. +开源项目是由多样和地理分布广泛的社区开发的,这些社区有着自己的规则、惯例、工具和流程。简而言之,每个社区都有其独特的文化,需要时间来建立在开源生态中高效工作所需的信任、协作方式和文化理解。 -This guide explains how organizations can build leadership and influence within the open source projects they’re involved in and on which they are commercially dependent. Learn about leadership culture and roles within a project, how decisions are made, how an organization can build leadership, and tips for being a good leader in open source communities. +本指南阐述了组织如何在商业上有所依赖的开源项目中建立领导力和影响力,了解项目内的领导文化和角色,决策的制定方式,组织如何建立领导力,以及在开源社区中成为一名优秀领导者的技巧。 -## Why build leadership in an open source project +## 何为要在开源项目中建立领导力 -Although the open source culture is collaborative, contributing upstream is only the first step in shaping an open source project’s progression. Taking an active role in guiding or influencing the project’s direction is also important if the project is critical to your company’s own products. +尽管开源文化是协作式的,向上游贡献也只是影响开源项目发展的第一步。如果项目对公司自身产品至关重要,那么积极参与引导或影响项目方向也很重要。 -While open source projects have repeatedly proved the value of collaborations that even – and maybe especially – include competitors, having no say in a project’s direction can quickly prove to be a competitive disadvantage. And this is why building and maintaining leadership in open source projects is key to corporate strategies and goals. However, it isn’t as easy as pounding desks and throwing around cash-based clout. +尽管开源项目已多次证明合作的价值,甚至包括竞争对手,但无法参与项目方向决策很快会变成竞争劣势。这就是为什么在开源项目中建立和维护领导力对企业的战略和目标至关重要。然而,这并不像拍桌子或砸钱那么容易。 -## Leadership culture in open source +## 开源中的领导力文化 -It is common for companies to first assume that leadership in an open source community works the same way as leadership does in a corporation. It doesn’t. +一般,公司首先认为在开源社区中的领导工作方式与公司中的领导工作方式相同。事实并非如此。 -“Companies often go through a phase of thinking ‘Oh, well, we’re huge. Why can’t we pound our fist on the table and just make the community do what we want?’” explains [Guy Martin](https://www.linkedin.com/in/guywmartin/), Director of the Open@ADSK initiative at Autodesk. “They soon come to realize that tactic won’t work. They come to understand that the only way to gain leadership is to earn the role within the community. And the only way to do that is to gain credibility and make contributions.” +"公司往往会经历这样的阶段,认为 '哦,我们很大,为什么不能敲敲桌子,让社区按我们的意愿行事呢?'" 在Autodesk的Open@ADSK倡议主管Guy Martin解释道。"他们很快意识到这种策略行不通。他们逐渐明白,获得领导地位的唯一途径是在社区内赢得角色,而实现这一点的唯一方式就是赢得信誉并作出贡献。” ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community1.png) -## Corporate vs open source leadership +## 企业领导力与开源领导力 -While gaining leadership in an open source project can be vital to a company’s own success in the commercial world, taking on such a radically new approach to product development is often counterintuitive and sometimes awkward in the beginning. +在开源项目中获得领导力对公司自身在商业领域的成功至关重要,但采取这种颠覆性的新产品开发方法通常在开始阶段会显得违反直觉,有时甚至显得尴尬。 -Traditional, proprietary development requires secrecy and a management hierarchy. By contrast, titles and positions are meaningless in open source development, which instead puts a premium on openness and consensus. +传统的专有开发需要保密和管理层级。相比之下,开源开发中的职称和职位毫无意义,重要的是开放和共识。 -Code contributions are what determine influence and technical direction in an open source project. That means no fudging on code contributions; they must be substantial and truly advance the project in some way. +在开源项目中,影响力和技术方向取决于代码贡献。这意味着不能模糊代码贡献的界限;它们必须是实质性的,真正推动项目发展的方式。 -At first, making upstream contributions and openly collaborating can feel like giving away the store. But that feeling is not based in the open source reality; instead, it is a twinge of apprehension commonly associated with making a significant change in thinking and actions that is so very necessary to innovating. +起初,向上游贡献和开放协作可能会感觉像是在放弃自己的东西。但这种感觉不是建立在开源现实基础上的;相反,它是对思维和行动的重大变动的一种担忧。这种变动是创新必须的。 -The open source leadership mindset involves thinking about: +开源领导力的思维方式包括: -* Influence, not control -* Transparency as a means of crowd-sourcing solutions, not as exposure -* Leading, not herding +* 影响力而非控制 +* 将透明度作为众包解决方案的一种手段,而不是作为曝光手段 +* 引领而非驱赶 -Successfully making the shift from a proprietary to an open source mindset and culture requires time and effort and sometimes a regular reminder of the benefits in doing so. [Ibrahim Haddad](https://www.linkedin.com/in/ibrahimhaddad/), vice president of R&D and Head of Open Source at Samsung Electronics, built this chart for ease of reference. +成功地从专有思维和文化转变为开源思维和文化需要时间和努力,有时甚至需要定期提醒其中的好处。三星电子副总裁兼开源负责人Ibrahim Haddad为此建立了这张简明参考表。 ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community2.png) -## Governance overview +## 治理概览 -Governance guidelines in open source communities tend to be few but they are nonetheless rigidly enforced. The code of conduct or community guidelines are unique to the community but generally address acceptable and expected behavior and the procedures for handling unacceptable behavior or other incidents. A governance policy details the management of the open source project’s policies, structures and roadmap. A maintenance policy typically addresses other project decisions such as software updates. +开源社区的治理准则通常很少,但它们仍然严格执行。行为准则或社区指南因社区而异,但通常涵盖可接受和预期行为,以及覆盖处理不可接受行为或其他事件的程序。治理政策详细说明了开源项目的政策、结构和路线图的管理。维护政策通常涉及其他项目上的决策,如软件更新等。 -But governance at and surrounding the project and community level does not represent the entirety of governance policies and issues. Those also exist at the points where open source software is consumed, contributed to, redistributed and/or produced by commercial interests or other organizations. Therefore, open source governance is by necessity part of the broader IT governance effort. +但在项目和社区层面以及周围的治理不代表整体治理政策和问题。这些政策和问题也存在于开源软件被商业或其他组织消耗、贡献、重新分发和/或生产的地方。因此,开源治理必然成为更广泛的IT治理工作的一部分。 -Companies tend to experience similar issues, such as multiple processes for how open source is consumed, inconsistent ways of contributing upstream in communities, and variances in how open source projects are created internally. Developing a standardized set of governance is key to taming the chaos. +公司往往会遇到类似的问题,如消耗开源的多个流程、在社区中向上游贡献的不一致方式,以及公司内部创建开源项目的变化。制定标准化的治理政策对于控制混乱至关重要. -“We aimed for one single process for contributing upstream and as an engineer I wanted it streamlined,” Martin said. “I didn’t want a ten-week process with 500 pages of documentation for a five-line bug fix, so I worked with legal to streamline the workflow so an engineer could accomplish it in a reasonable amount of time. And then we did the same thing for creation of opensource projects from code that’s in the company.” +"我们希望为向上游贡献制定一个单一的流程,作为工程师,我希望简化流程," Martin说道。"我不希望为了修复一个五行代码的错误而花费十周的时间,处理500页的文档。因此,我与法律部门合作,简化了工作流程,使工程师能够在合理的时间内完成工作。然后我们也为公司代码转换为开源项目做了同样的事情。” -It’s best for each company to work out the particulars in its own open source governance policies and processes so that it best fits how their company actually works; in effect mirroring how governance is best done at the community level. But be aware that you may not be able to repeat a single process for all open source activities in your company. +最好让每家公司根据自身的开源治理政策和流程制定具体的规范,以便最好地适应公司的实际运作方式;实际上,这是对社区层面治理最佳实践的反映。但请注意,你可能无法针对公司的所有开源活动重复单一流程。 -A consistent governance plan prevents a huge version skew, as well as open source license and security issues. “A consistent governance model for open source consumption helps ensure compliance so that when we ship something, we know we’ve got the right license compliance in place.” +一致的治理模型有助于避免巨大的版本差异,以及开源许可证和安全性问题。"对于开源消费,一致的治理模型有助于确保合规性,因此当我们发布产品时,我们知道我们已经采取了正确的许可证合规措施。" ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community3.jpg) -## Culture overview +## 文化概览 -While there is a pressing need to shift an organization’s internal culture to an open source state of mind, such must be accomplished without losing sight of, or disconnecting from, the open source community outside of the company walls. +虽然急需转变组织内部文化以符合开源思维,但必须在不失去与公司外部开源社区的联系和视野的前提下完成这一转变。 -“In order to develop influence on an open source project, you have to get a group of people whom you don’t know, who work for different companies, and may have different objectives to agree with you,” explains [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), senior director of open source at Oath (Yahoo+AOL). +"为了在开源项目中发挥影响力,你必须让一群你不认识的人同意你的观点,他们来自不同的公司,可能有不同的目标," 雅虎+美国在线(Oath)开源高级总监Gil Yehuda解释道。 -That’s often easier said than done, since disputes and pushbacks are common and resolutions can take one of many directions depending on community consensus. +尽管这么说起来容易,但在实际操作中常常遇到争议和反对意见,解决方案可能根据社区共识的不同而采取多种方向。 -“In an open source community, you have people who work for different companies who may have lots of areas of shared purpose and shared outcome and some areas of contention and cross purposes,” explains Yehuda. +"在开源社区中,你会遇到来自不同公司的人,他们可能在许多领域有共同的目标和共同的结果,但也可能存在争议和不同目标的领域," Yehuda解释道。 -For example, there may be one set of developers who want new functionality because they need it to make something work, but another group that doesn’t want that new functionality because they want stability. +例如,可能有一组开发人员需要新功能,因为他们需要使某些功能正常工作,但另一组不希望这个新功能,因为他们想要稳定性。 -“Perhaps the new functionality compromises the stability or the scalability. There’s going to be a fight or at least some tension over that,” explains Yehuda. +"也许新功能会影响稳定性或可伸缩性。对此会有争论,或者至少会有一些紧张情绪," Yehuda解释道。 -Resolving the issue so that the project proceeds in one direction or the other is no small feat considering that no one person is in charge of making the decision. Instead, it’s a communal decision. +解决这个问题,使项目朝一个方向前进,并不容易,因为没有一个人可以独自作出决定。相反,这是一个社区决策。 -“One of the things that can help the community arrive at what you would consider favorable resolution is if you have more influence in the project,” says Yehuda. “They’re going to support you even in a decision that might have small short term negative impact to them if you have leadership and you’re a trusted member of the community, and you have the community’s interest at heart.” +"帮助社区达成你认为有利解决方案的一个因素是,如果你在项目中拥有更多的影响力," Yehuda说道。"即使你的决定可能对他们有一些微小短期负面影响,他们也会支持你.前提是你拥有领导力,是社区的信任成员,并且你站在社区的利益一边。" -But building that leadership and maintaining it is as much a company mission as it is an individual developer’s goal. +但建立和维护这种领导力既是公司的使命,也是个人开发者的目标。 -Oath’s approach is to instruct its developers to involve company assistance when they see situations that could potentially be contentious. +Oath的方法是告诉开发人员,如果他们看到可能引起争议的情况,应寻求公司的帮助。 -“We have active consulting, we have internal conversations about situations and how to best approach them, we have developers that share anecdotes with each other about situations and how they can resolve them,” says Yehuda. +"我们进行积极的咨询,内部讨论如何最好地处理情况,开发人员彼此分享情况以及如何解决它们的经验事故," Yehuda说道。 -It’s also important to understand that leadership rests with the person, not the company. So even though the individual developer has the backing and assistance of his or her employer, that employer is at risk of losing influence if that developer chooses to leave. +还要理解一点,领导力在个人而非公司身上。因此,即使个人开发者得到了雇主的支持和帮助,但如果该开发者选择离开,雇主可能会失去影响力。 -“If you’ve got an open source project that is super critical to your product and you’ve only got one person from your company making upstream contributions, you have a single point of failure,” explained Martin. “You have to a succession plan in place and it needs to include more than couple of people at your company.” +"如果你的开源项目对你的产品至关重要,而你公司只有一个人向上游贡献,那么你就存在单点故障的风险," 马丁解释道。"你必须制定一份接班计划,而且需要公司有多个人参与其中。 -That means multiple people in your company will be making upstream contributions. A common first reaction to that idea is fear of tying up too many human resources on an open source project that other companies will benefit from. But that’s not the case if you organize their time well. +这意味着公司内将有多人向上游贡献。对这个想法最常见的第一个反应是担心耗费太多人力资源在其他公司将受益的开源项目上。但如果你合理安排时间,这并不是问题。 -“It’s more palatable to engineering management when less of Joe Smith’s time is used to make upstream contributions because that burden is shared with three or four other developers,” Says Martin. +"当不止一个工程师像乔·史密斯(Joe Smith)那样花费时间向上游贡献时,对工程管理人员来说更容易接受,因为这种负担可以分担到其他三四名开发人员身上," Martin说道。 -By balancing the workload, you also reduce the risk to the company in losing project influence when a key developer leaves. This is also an attractive plan to developers who actively seek to increase their exposure in building leadership in the community as that ultimately boosts their careers and earning power. More developers get a lead role in this plan. +通过平衡工作量,你还可以减少公司在关键开发者离职时失去项目影响力的风险。对那些积极寻求在社区中建立领导地位以提升个人职业生涯和收入的开发人员来说,这也是一个有吸引力的计划。更多开发人员在这个计划中担任主导角色。 -Further, a company can adopt open source practices and principles internally through innersourcing, in order to complete the culture shift to open source, improve their innovation rate and successes, and further connect with the open source community which helps build leadership and attract developers. +此外,公司可以通过内部开源实践和原则进行内部协作,以完成向开源文化转变,提高创新率和成功率,并进一步与开源社区联系,帮助建立领导力和吸引开发人员。 ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community4.png) -In short, culture is imperative in all its many nuances and on many levels, if the goal is to build and maintain leadership and thus some measure of control over critical projects. +简而言之,如果目标是建立和维护领导地位,并对关键项目进行某种程度的控制,那么文化在其许多细微之处和许多层面都是至关重要的。 -Through it all, remember to be mindful of the one percent rule. “90% are along for the ride and participate passively – this is the user community; 9% participate actively, submitting bugs, answering questions publicly – we call these ‘contributors’; 1% help to guide or control the project, assign bugs, determine direction – these are ‘maintainers’, or more simply, leaders,” explains Jeff Osier-Mixon, Intel/Yocto Project. +在此过程中,请记住“百分之一规则”。"90%的人只是乘坐飞机,被动地参与 —— 这是用户社区;9%积极参与,提交错误报告,公开回答问题 —— 我们称之为'贡献者';1%协助指导或控制项目,分配错误修复任务,确定方向 —— 这些是'维护者',或者更简单地说,是领导者," Intel/Yocto Project的Jeff Osier-Mixon"解释道。 -Each project is unique; adapt on a project by project basis. +每个项目都是独特的;根据项目逐个进行调整。 -## Leadership roles in a collaborative project +## 协作项目中的领导力角色 -While roles appear similar to corporate roles and structure, every project is different and structured and managed by a specific set of community guidelines and a governance policy. Be sure to read the documentation, join IRC for real-time, private chats, join mailing lists, etc. for guidance on how roles are defined and how the project is structured and managed. +尽管角色看起来与公司的角色和结构类似,但每个项目都是独一无二的,由一套特定的社区准则和治理政策来组织化和管理。务必阅读文档,加入实时的IRC、私人聊天,加入邮件列表等,了解角色是如何定义的,以及项目是如何结构化和管理的。 -Meanwhile, the following will give you a general understanding of some of the common types of leadership roles. +同时,以下将让你大致了解一些常见类型的领导角色。 -### Technical leadership +### 技术领导力 -* Committer/Maintainer -* TAB/TSC member -* TSC chair/chief architect -* Documentation/technical writer – “this is a special case maintainer” +* 提交者/维护者 +* 技术咨询委员会(TAB)/技术委员会(TSC)成员 +* TSC主席/首席架构师 +* 文档/技术撰稿人 —— “这是一个特例的维护者” -### Governance leadership +### 治理领导力 -* Executive director -* Committees/subcommittees -* Board member/member representatives +* 执行董事 +* 委员会/子委员会 +* 董事会成员/成员代表 -### Operational leadership +### 运营领导力 -* Project managers -* Community managers and advocates +* 项目经理 +* 社区经理和倡导者 -## Leadership roles matrix +## 领导力角色矩阵 -Keep in mind that while these roles resemble their traditional counterparts in a historical management hierarchy, they are not the same. One cannot simply transpose the values, processes and principles from the old closed model to the new open source model. In many ways they are direct opposites, or perhaps mirror images. In any case, they are different in every important way. To choose one is to reject the other. +请记住,虽然这些角色在历史管理层次结构中类似,但它们并不相同。你不能简单地将旧的封闭模型的价值观、流程和原则移植到新的开源模型中。在许多方面,它们是直接相反的,或者可以说是镜像。无论如何,它们在各个重要方面都是不同的。选择一个意味着拒绝另一个。 -The leaders in open source are comfortable and even promote transparency and must obtain consensus before a project can move ahead. The process and leadership style can be maddening to those who prefer to cling to the traditional business structure. +开源领导者习惯于并且甚至推广透明度,并且必须在项目向前推进之前获得共识。这个过程和领导风格对于那些更愿意坚持传统商业结构的人来说可能会让人发狂。 -In response to the frustrations often encountered in this sweeping cultural change, “a lot of companies will take the path of least resistance, which is ”oh this is great. I’m going to start with this as a base, fork it and do my own thing internally," says Martin. +针对这种全面文化变革经常遇到的挫折,"很多公司会选择最省力的方式,也就是"哦,这很好。我将以这个作为基础,走岔路并在内部做自己的事情," Martin说道。 -“The problem is that’s not sustainable and scalable in the long term because the further you diverge away from the rest of the community, the harder it’s going to be when there’s a next major upgrade that you want to pull from the community,” he said. +"但问题是,从长远来看,这样是不可持续的,也不具备可扩展性,因为你离开社区的距离越远,下次想要从社区获取重大升级时就会越困难," 他说道。 -Simply put, open source is a community effort and anything you do that pulls your work away from the community will eventually be to your company’s detriment. +简而言之,开源是一种社区努力,你做的任何事情,如果使你的工作与社区产生脱节,最终都会对你的公司产生不利影响。 -## How to become a leader +## 如何成为领导 -Becoming a leader in a collaborative environment requires considerable people skills and a willingness to see no work as beneath your rank. +在协作环境中成为领导需要相当多的人际关系技巧和愿意看到任何工作都不低于自己级别的意愿。 -> “It is as simple as noticing that something needs to be done, and doing it – filing a bug, answering a question, offering to sit in the booth at a conference.” -> -> -– Jeff Osier-Mixon, Open Source Community Manager at Intel, speaking at Open Source Leadership Summit 2017. +> “最简单的事情就是注意到需要做的事情,并去做 —— 提交错误报告,回答问题,愿意在会议上坐在展台旁," —— Intel的开源社区经理Jeff Osier-Mixon在2017年的开源领导峰会上发言。 -And, of course, it requires significant technical skills in open source and the audacity in boldly using them – but only after you’ve studied the lay of the land, understood the group dynamics, and done some of the dirty work yourself. +当然,还需要在熟悉环境、了解团队动态并亲自做一些琐碎工作之后,大胆运用开源技术技能。 -In other words, becoming a leader starts with earning the group’s respect. You can’t demand it, you must earn it. +换句话说,成为领导者始于赢得团队的尊重。你不能要求它,你必须去赢得它。 -### Where to join in to prove your chops and earn leadership +### 如何加入并证明自己的实力以及获得领导力 -Projects document how to join a committee, become a maintainer, and how to do join in at almost any level. Look at those documents to find a place to begin fitting into the group. You can start anywhere you like, just don’t cut in line. +项目记录了如何加入委员会,成为维护者,以及如何在几乎任何层次参与。查看这些文档,找到一个开始融入团队的地方。你可以从任何你喜欢的地方开始,只是不要插队。 -“The one thing a person can do to develop influence is listen, understand, really try to read a situation before jumping in. If you can develop that habit over time then I think people will respect your contributions and find you to be more influential,” says Yehuda. +"一个人可以发挥影响力的事情是倾听,理解,真正试着在加入之前读懂情况。如果你能随着时间的推移养成这种习惯,那么我认为人们会尊重你的贡献,并认为你更具影响力," Yehuda说道。 -Open source conferences also provide a great way to meet other developers and leadership in a community. Beyond networking, making presentations at such events is a noteworthy way to share your and your company’s accomplishments and contributions to open source projects. +开源会议还提供了与社区其他成员交流的良好机会。除了建立人际关系之外,在这些活动中进行演讲也是一个非常有效的方式,可以展示你和你所在公司在开源项目中的成就和贡献。 -Yehuda says his company, Oath, helps developers hone their presentation skills and polish specific presentations so that they succeed on stage. Practice makes perfect, so the more presentations developers make, the better they get at doing it – and the more recognizable their face, name and work becomes to the open source community. +Yehuda说,他所在的公司Oath帮助开发者提升他们的演讲技巧,精心打磨他们的演讲,以确保他们在舞台上获得成功。实践是最好的老师,所以开发者参加的演讲越多,他们就越擅长 —— 这也使得他们在开源社区中的面孔、名字和工作变得更加有名。 -Contributions upstream will do the most in establishing your credentials and reputation in the community, however. Jump in and fix bugs where you see them and make contributions that will be helpful to the entire community and not just for your own projects. +然而,对于建立自己在社区中的声誉和信誉来说,向上游贡献是最重要的。投身其中,修复你看到的问题,做出对整个社区有益的贡献,而不仅仅是为了自己的项目。 -### Joining vs creating a project +### 加入与创建项目的对比 -Joining a project may seem like a slow path to a leadership position. Indeed, it does take time. However, it has advantages too, including immediate gains by benefitting from the work the community has already done and none of the expense of starting your own project. +加入一个项目可能看起来是走向领导地位的缓慢途径。确实,这需要时间。然而,它也有优势,包括立即受益于社区已经做过的工作,并且不需要成本启动自己的项目。 -Starting your own projects in order to establish leadership, won’t gain you much. +为了建立领导地位而开始自己的项目并不会有太大收获。 -As Martin put it, “if you’re the only group of kids in the sandbox, all from the same company, are you really leaders, or are you just the only people working on the project?” +Martin说,"如果你们是沙盒里唯一的一群孩子,都来自同一家公司,你们真的是领导者吗,还是只是在项目工作的唯一一群人?" -If you do start a project, do so for reasons other than establishing leadership because frankly no one else might join. That’s especially true if your project is less than stellar or competes with an established project. +如果你确实开始了一个项目,那么做这件事的理由不应该是为了建立领导地位,因为坦率地说,特别是如果你的项目不是很出色,或者与一个已经建立的项目竞争,可能没有其他人会加入。 -“Starting a project takes a lot of work. Don’t start it if your code would be better off served contributing to another project where you could become a leader in that project by the basis of your code contributions,” advises Martin. +马丁建议说,"开始一个项目需要大量的工作。如果你的代码更适合贡献给另一个项目,在那个项目中通过你的代码贡献成为领导者,可能更为明智。" ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community5.jpg) -### Technical contributions +### 技术贡献 -Donating code is serious business in open source communities. Building the project is exactly the point of the joint exercise. With many hands, the work is lighter, and by many contributions the risks are lowered and the quality heightened. Those are the goals anyway. +在开源社区中,提交代码是一件严肃的事情。共同建设项目正是这个合作的目的。众人拾柴火焰高,通过众多的贡献,风险减少,质量提高。这些都是目标。 -The number one rule is to make sure that your contributions are useful to others and not just self-serving. But usefulness isn’t limited to big advancements; smaller bug fixes and other tweaks are appreciated too. The point is to make your contribution universally helpful, whether big or small. +首要原则是确保你的贡献对其他人有用,而不仅仅是为了自己。但是有用性不仅仅体现在重大进展上;修复小错误和其他调整也同样受欢迎。无论是大还是小,关键是要使你的贡献在普遍上有帮助。 -Ibrahim Haddad also counsels contributors to follow the proper coding style, work within the project’s submission processes, provide documentation and explanations, listen to feedback, and wait patiently for acceptance. +Ibrahim Haddad还建议贡献者遵循适当的编码风格,在项目的提交流程内操作,提供文档和解释,倾听反馈,并耐心等待接受。 ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/building-leadership-in-an-open-source-community6.jpg) -### Hiring talent +### 招聘人才 -It’s no secret that open source developers are in short supply. That is likely to remain the case for the foreseeable future given that adoption of open source projects is at an all-time high and shows no signs of slowing. Not only does this mean that it is hard to find skilled developers to hire, but it is also tough to retain them if you do. +众所周知,开源开发人员的供应短缺。在可预见的将来,情况可能会持续下去。因为开源项目的采用率创历史新高,并且没有放缓的迹象。这不仅意味着很难找到合适的开发人员,而且如果找到了,要留住他们也很难. -A 2016 Cloud Foundry [report](https://www.cloudfoundry.org/developer-gap-2016/) found that there are “a quarter-million job openings for software developers in the U.S. alone and half a million unfilled jobs that require tech skills.” Additionally, the analysts forecast that the number of unfillable developer jobs will “grow to one million within the next decade.” +2016年的一份Cloud Foundry报告发现,在美国单单软件开发人员就有25万个职位空缺,需要技术的空缺职位更是达到了50万个。此外,分析人士预测,未来十年内,不可填补的开发人员空缺职位数量将增长到一百万个。 -The demand for open source developers is even more extreme. +对于开源开发人员的需求更是极大的。 -Still you can find out who are the leaders and who are regular and skilled contributors in an open source community and try to hire them directly. Or, you can ask them to recommend developers they themselves would like to work with. +你可以找出开源社区中的领导者和普通技术贡献者,尝试直接聘请他们。或者,你可以要求他们推荐他们自己想一起工作的开发人员. -“If you’re planning on hiring a maintainer, or hiring a strong contributor, keep in mind that those people are in high demand and they’re the most job flexible people on the planet. Meaning, they can go from company to company, and still work on the same project. The only thing that changes is the name of the company signing their paycheck,” says Martin. +Martin说,"如果你计划招聘一个维护者,或者雇佣一名优秀的贡献者,请记住,这些人是最受欢迎的工作人员,他们对工作地点非常灵活。换句话说,他们可以在不同公司之间来回流动,但仍然在同一个项目上工作。唯一改变的只是签发工资支票的公司名字。" -You can find additional guidance on hiring open source developers in the Linux Guide “[Recruiting Open Source Developers](https://www.linuxfoundation.org/recruiting-open-source-developers/).” +你可以在Linux指南"[招聘开源开发人员](https://www.linuxfoundation.org/recruiting-open-source-developers/)"中找到更多关于招聘开源开发人员的指导。 -### Building talent (the best way) +### 培养人才(最佳方式) -Fortunately, open source is so hotly in demand that developers actively seek opportunities to develop or hone their open source chops. Martin says that every developer he’s interviewed to date has asked him how the company will help him build his own open source brand. Helping the developer grow into leadership in an open source community is a prime perk and useful in recruitment. +幸运的是,开源非常受欢迎,开发人员积极寻求机会发展或提高他们的开源技能。马丁说,迄今为止,他采访过的每个开发人员都问过他们的公司将如何帮助他们建立自己的开源品牌。帮助开发人员成长并走向开源社区的领导地位是一项主要的福利,也是招聘的有用方式。 -Raising your own company’s visibility in its open source work can thus also help recruit developers. Some companies even offer open source training to add to the appeal. Presenting the company’s open source projects at conferences and contributing code in communities hare the best ways to raise your company’s visibility. Asking your developers to network with other developers and invite them aboard also tends to work well. +提高公司在开源工作中的可见性也可以帮助招聘开发人员。一些公司甚至提供开源培训,以增加吸引力。在会议上介绍公司的开源项目,并在社区贡献代码是提高公司知名度的最佳方式。要求你的开发人员与其他开发人员建立联系并邀请他们加入也通常效果良好。 -Another key approach to attracting developers is by offering apprenticeships. Developers like to work on significant projects with plenty of reputation-building challenges. Offering apprenticeships and mentorship programs tends to be a successful draw and a great way to leverage the talent you already have onboard. +吸引开发人员的另一个关键方法是提供学徒制。开发人员喜欢在重大有挑战性的项目中工作。提供学徒制和导师计划往往是成功的吸引因素,也是利用已有人才的好方法。 -Above all, gain the community’s trust so that your company is attractive to open source developers and to developers who seek to advance their career by working with a trustworthy, open source leader. +最重要的是,赢得社区的信任,使你的公司对开源开发人员具有吸引力,对那些寻求通过与值得信赖的开源领导者合作来推动职业发展的开发人员也具有吸引力。 -> “Like anyone else, commercially-motivated developers gain influence in the project through the quality and quantity of their contributions.” – [Open Source Guides](https://opensource.guide/leadership-and-governance/#what-happens-if-corporate-employees-start-submitting-contributions), GitHub, Leadership and Governance, corporate employees. +> "像其他商业动机的开发人员一样,通过他们贡献的质量和数量在项目中获得影响力。" – [开源指南](https://opensource.guide/leadership-and-governance/#what-happens-if-corporate-employees-start-submitting-contributions),GitHub,领导力与治理,企业员工。 -### Strategic contributions +### 战略性贡献 -Strategic contributions are significant in establishing leadership. They tend to address a large problem shared across the ecosystem, or provide a key advancement that pushes the project past a community set goal line. +战略性贡献在建立领导地位方面非常重要。它们通常解决了整个生态系统的某个重大问题,或者提供了一个关键进展,使项目超越了社区设定的目标线。 -However, you can’t just release the code and forget about it. There’s work to do in providing documentation, expanding the ecosystem, partnering to advance this code or toolset even further, and so on. Staying in the game and remaining both visible and reliable is key. +然而,你不能只发布代码然后置之不理。提供文档、扩展生态系统、合作推动代码或工具进一步发展等方面,都还有很多工作要做。保持参与并保持可见性和可靠性至关重要。 -### Non-technical contributions and support +### 非技术贡献和支持 -Beyond technical contributions, strategic and otherwise, are other ways to contribute and support the community thereby further building leadership. +除了技术贡献,战略贡献和其他贡献之外,还有其他的贡献方式可以支持社区,从而进一步建立领导地位。 -Those include contributing to and supporting developer education and providing mentorship. Providing support for the technical aspects is another successful way to establish leadership. +这些包括对开发人员教育的贡献和支持,以及提供导师。提供对技术方面的支持也是建立领导地位的成功方式之一。 -The key is to look around and see what the community needs beyond technical contributions and then step up to contribute some of that. +关键是要环顾四周,看看社区需要什么样的贡献,然后积极投入其中。 -## Final words +## 最后 -In summary, being a good leader and winning influence takes time and hard work. +总之,成为一个优秀的领导者并赢得影响力需要时间和努力。 -Specific ways to work at becoming a leader include: +努力成为领导者的具体方法包括: -* Adapt to the OSS project culture, practices and tools. Work to fit in and follow the rules and processes. Remember it’s not about you; it’s about the project. -* Do the grunt work. Projects need workhorses, not all-stars. Besides, if you can’t do the work, you can’t earn the right to lead. Be quick to show you can and will do the work needed. -* Be magnanimous. Contribute code that benefits the whole project. -* Build consensus. True leaders can build consensus, work to help achieve consensus even before becoming a leader to show that you aren’t a grandstander or a tyrant. -* Accept that leadership changes. Recognize and accept that leadership roles move with the people, not the company that employs them. +* 适应开源项目文化、实践和工具。努力融入并遵循规则和流程。记住这不是关于你自己,而是关于项目 +* 做肮脏的工作。项目需要的是勤劳肯干的人,而不是明星。此外,如果你不能做这项工作,你就没有资格担任领导者。展示你有能力并且愿意做需要的工作。 +* 慷慨大方。贡献代码让整个项目受益。 +* 建立共识。真正的领导者可以建立共识,努力在成为领导者之前帮助达成共识,以显示你不是一个好大喜功者或者专制者。 +* 接受领导力的变化。认识并接受领导角色随着人员变动而变化,而不是随着雇佣他们的公司而变化。 -## Acknowledgements - -Contributors to this guide: +## 鸣谢 +本指南的贡献者: * Guy Martin, Autodesk * Gil Yehuda, Oath diff --git a/content/zh-CN/guides/career-development.md b/content/zh-CN/guides/career-development.md index f5aa7913..f5950458 100644 --- a/content/zh-CN/guides/career-development.md +++ b/content/zh-CN/guides/career-development.md @@ -1,228 +1,287 @@ --- -title: Managing Career Development within OSPOs +title: 开源项目办公室团队成员的职业发展管理 --- -*People can also download the guide infographic as PDF [here](https://github.com/todogroup/todogroup.org/files/9714409/managing.career.development.within.OSPOs.infographic-1-2.pdf)* +*大家也可以从[这里](https://github.com/todogroup/todogroup.org/files/9714409/managing.career.development.within.OSPOs.infographic-1-2.pdf)下载指南信息图的 PDF*。 -Open Source Program Offices (OSPO) provide distinct value for businesses. But it is the distinctive nature of the work that makes OSPO professionals appear highly specialized or their job role difficult to categorize into traditional role definitions. Further, the industry has a lack of consensus on job titles and job descriptions between OSPO professionals, community managers and developer relations professionals, with similar roles being more or less highly prized depending upon which business is doing the hiring. Combined, these issues can make recruiting junior professionals into OSPOs more challenging, and defining an upward career path for senior talent more of an art than a science. +开源项目办公室为企业提供独特的价值。但是,其工作的独特性使得开源项目办公室专业人士看起来高度专业化,或者他们的职位角色很难归入传统的角色定义中。此外,该行业在开源项目办公室的专业人士、社区经理和开发者关系专业人士之间的职位名称和职位描述方面缺乏共识,类似职位的受重视程度取决于正在招聘的企业。综合来看,这些问题使得招募初级专业人士进入开源项目办公室变得更加挑战,为高级人才定义上升的职业道路更像是一门艺术而非科学。 -The purpose of this guide is to help OSPO leaders build a sustainable and rewarding career path for their employees, including helping them gather depth of skills in particular areas so they’re well prepared to develop their careers in more than one area of the business. -![career-development-infographic](/img/guides/career-development-infographic.png) +该指南旨在帮助开源项目办公室领导者们为他们的雇员打造可持续和可回馈的职业道路,包括帮助他们在特定领域积累深厚的技能,从而为他们在企业的多个领域发展职业生涯做好准备。 -**Table of Contents** +![career-development-infographic](/static/img/guides/career-development-infographic.png) -- [Guide Description](#guide-description) -- [Defining the scope of work for OSPO roles](#defining-the-scope-of-work-for-ospo-roles) -- [Refitting existing career ladders for open source](#refitting-existing-career-ladders-for-open-source) -- [Integrating the unique with the standard](#integrating-the-unique-with-the-standard) -- [Mapping Skill Categories](#mapping-skill-categories) -- [Example: Mapping the Skills of a Community Manager](#example-mapping-the-skills-of-a-community-manager) -- [Retaining and Promoting Your OSPO Professionals: Job Ladders](#retaining-and-promoting-your-ospo-professionals-job-ladders) -- [Guide reports on building their personal brand](#guide-reports-on-building-their-personal-brand) -- [OSPO Leader Networking](#ospo-leader-networking) -- [Mapping futures](#mapping-futures) +开源项目办公室的职业路线图 +这个路线图帮助组织为他们的员工建立一个可持续和有回报的开源项目办公室职业路径,包括帮助他们在特定领域获得深入的技能,以便他们能够在业务的多个领域中发展自己的职业。 +开始加入开源项目办公室! +加入TODO /开源项目办公室社区 +https://todogroup.org/community/ -## Guide Description +探索开源项目办公室资源 +https://todogroup.org/guides/ -Several issues that affect OSPO performance, visibility and skill transferability necessary to career advancement are covered in this guide. +开源项目办公室培训 +https://github.com/todogroup/ospo101 -For example, this guide includes an exploration of where in an organization an OSPO belongs. Should it live in marketing, engineering or the CTO office? Also, what kind of skillsets are needed for the OSPO to function, and how do they translate to more traditional roles? +什么是TODO Group? -Further, how can OSPOs build staff skills within the office? Can you augment OSPO skill sets by shifting people into OSPO from their former roles, whether it's product management or product marketing, or something else? +TODO Group是一个开放的实践者社区,旨在创建和分享知识,合作实践、工具以及其他运行成功且有效的开源程序办公室或类似开源计划的方法。 -In any case, it’s time to have a plan to cement OSPO job roles as vital elements in any organization, and as vital skills that are fully transferable to other roles throughout the organization. This guide seeks to lend assistance in that endeavor. +阅读更多关于该组织的信息,加入社区或成为支持者以参与其中。 -Most importantly, in order to recruit and retain talent in crucial roles, OSPO leaders must proactively help staff members plan their career advancement strategy. This guide will help OSPO leaders to: +与同行社交: -* Map staff’s diverse job skills and responsibilities in traditional business terms; +成功的开源项目办公室领导者与他们的同行进行社交,以推广自己,指导其他领导者,并发现新的方法来支持他们的报告。 -* Understand how an OSPO specific job ladder can support the career development of and retention of key staff, with tips on how to get started creating one; +保留和提升: -* Support the growth and development of their staff members’ personal brands as part their OSPO public-facing work responsibilities. +那些在职业阶梯上提供最高层次的组织往往能够吸引到大人才。 -This guide aims to assist OSPO leadership in advancing their careers and leveraging the skills they have gained across these traditional roles as they seek new career challenges. +技能类别映射: -## Defining the scope of work for OSPO roles +将开源项目办公室员工在日常工作中使用的技能分解,并将其纳入其他公司部门或部门内公认的技能类别中。 -*"When I think about career development for my team, and this is true about anyone who's building an open source office within a company in general, I’m thinking about how can we be very intentional about either expanding or contracting the scope of our office in order to facilitate some of the other work that needs to be done,"* said **Will Norris, Open Source Lead at Twitter. Formerly Open Source Engineering Manager at Google** +将独特与标准混合: -Alongside the OSPO scope expanding, contracting or changing over time comes the added challenge in defining the scope of work in specific open source tasks when so much of it occurs outside of traditional job descriptions and even outside the organization itself. Examples include an engineer who is contributing code to an external project, or someone who's doing community management, or someone who's doing other kinds of things that are more externally focused. +尽管大多数公司在思考和管理开源方面的模式类似,但组织差异是常见的。 -*"When you have someone who's doing a lot of their work externally, we've found that it's a real challenge to help provide visibility for those artifacts to help those individuals get the appropriate credit for it to help grow their careers,"* said Norris. +重新配置现有的职业阶梯: -One of the ways Google addresses that is with an open source council the company started in 2019. The council is composed of representatives who are working in different open source roles throughout the company so they can collaborate on solving common challenges. +例如,重新配置组织的工程职业阶梯,以反映社区管理者的类似技能。一旦为开源项目办公室团队完成了职业阶梯,并且人们相应地得到了提升,其他有开源人才的部门也对此表现出了兴趣。 -*"We have a new working group right now that is focused on exactly how we can help provide visibility into the work of individuals who are doing more external facing work than internal. Some of that is actually changing the job ladders at Google, getting language in there to really give credit to community contributions and to open source,"* Norris explained. +定义工作的范围: -Developing a useful open source career ladder is not as simple and straightforward as listing job duties and responsibilities. And yet OSPO managers have to start somewhere. +有意地扩展或收缩您的办公室的工作范围,以便促进需要完成的工作。 -*"Part of the process we did was to identify a job class that already existed in Red Hat in technical program management. That’s because human resources couldn't create a new job classification out of whole cloth. They have to use industry benchmarks such as those prescribed by IEEE or other industry guides,"* said **Deborah Bryant, senior director of the Open Source Program Office at Red Hat.** +建立个人品牌: -However, the path forward is further muddied by the job titles a typical OSPO uses too. +关于如何建立强大的开源项目办公室品牌的指导报告对于团队、项目和组织同样重要。 -*"No one really likes to use the term community manager, because we all know you can't actually manage a community. A community has a life of its own. It has a mind of its own and a will of its own,"* said Bryant. -*"You're really there to support. You're not there to manage. So it's always been debatable about how you name it. But we landed on community architect,"* Bryant added. +**目录** -While clarifying job titles is an essential starting point, pinning those jobs to existing job descriptions often remains an exercise in confusion. Yet, adding new job classes for OSPO specifically is quite commonly a near insurmountable hill to climb in many organizations. But that doesn’t mean the task is impossible. +- [开源项目办公室团队成员的职业发展管理](#开源项目办公室团队成员的职业发展管理) +- [指南描述](#指南描述) +- [为开源项目办公室角色定义工作范围](#为开源项目办公室角色定义工作范围) +- [重新调整现有职业阶梯以适应开源环境](#重新调整现有职业阶梯以适应开源环境) +- [将独特与标准相结合](#将独特与标准相结合) +- [映射技能类别](#映射技能类别) +- [示例:映射社区管理者的技能](#示例映射社区管理者的技能) +- [保留和提升您的开源项目办公室专业人员:职业阶梯](#保留和提升您的开源项目办公室专业人员职业阶梯) +- [建立个人品牌的指导报告](#建立个人品牌的指导报告) +- [未来规划](#未来规划) +- [致谢](#致谢) -Bryant was instrumental in developing Red Hat’s career ladder for OSPO from the outset. It didn’t exist when she joined the company in 2014, but the internal demand for it was already high. She says they used the engineering career ladder as their initial framework, but it wasn’t an exact fit. -*"The most significant difference was that community managers don't actually produce code. Sometimes they do it incidental to the work, sometimes they do it as a hobby, but their core responsibility is not producing code,"* Bryant said. -*"And because that's such a critical part of an engineer's career path, it made it difficult for a community manager then to move up through a promotional process where a part of the decision process and the requirements to be able to move in a career would have been based on, in part, not all, a code contribution,"* she added. +## 指南描述 -## Refitting existing career ladders for open source +本指南涵盖了影响开源项目办公室的表现、可见性和对职业晋升所必需的技能迁移性的几个问题。 -Bryant said she and her team set out to create a career ladder that reflected those elements. They refitted the engineering career ladder to reflect similar skills for community managers. +例如,本指南包括了探讨开源项目办公室在组织中应该归属哪个部门的问题。它是应当隶属于市场部门、工程部门还是首席技术官办公室?此外,开源项目办公室的运作需要哪些技能组合,以及这些技能如何转化为更传统的角色? -*"Basically, there's a competency matrix that shows where someone's skill level should be in leadership, in collaboration, in community contribution, in technical acumen. And then, along that matrix, it will describe what the person's skill level should be at. So we took that very complex competency matrix and modified it to reflect what we thought some of the skills would be for community managers or what we call community architects,"* Bryant said. +此外,开源项目办公室应如何在内部建设员工的技能?是否可以通过将人员从前职(无论是产品经理、产品营销或者其他角色)转移到开源项目办公室来增强开源项目办公室技能组合? -It took considerable and widespread collaboration to shape the career ladder from the beginning and finalize it as a fair and useful hiring and promotion tool in the end. +总之,现在是将开源项目办公室职位角色巩固为任何组织的重要元素,以及可完全转移到组织内其他职位的关键技能的时候了。本指南旨在为这一努力提供帮助。 -*"It went through peer review and a pretty deliberate process to make sure that not only did it create a career path and an ability to celebrate someone's accomplishments in community architecture, but it also corresponded with an opportunity to increase their compensation in that model within the company,"* Bryant said. +最重要的是,为了给关键职位招聘和留住人才,开源项目办公室领导者们必须积极主动地帮助员工们规划他们的职业发展策略。该指南将帮助开源项目办公室领导者们: -Once the career ladder was completed for the OSPO team and people were promoted accordingly, other departments with open source talent showed interest in it too. +* 用传统商业属于解释员工的技能和职责。 -*"That's been really gratifying to see that get adopted by other teams in other areas of the company,"* Bryant said. +* 了解开源项目办公室特有的职位阶梯如何支持关键员工职业发展和保留,并提供有关如何开始创建该职业发展阶梯的建议。 -True to open source roots and Red Hat’s culture, the company’s career guide is a work in progress, influenced by many voices working together towards an ever-changing definition of a useful tool. But whether you are just starting to develop an OSPO career guide or are working on one of many iterations, Bryant advises starting with the same focal point. +* 作为开源项目办公室面向公众工作职责的一部分,帮助员工发展和提升个人品牌。 -*"Start with a good understanding of what you really need from your open source program team. It may not be the same for every company. Some companies work mostly on a regulatory side in terms of license compliance and some other work. My team doesn't work on that. For me, there's a certain core set of skills that are important to me, as there are in other offices,"* Bryant says. +本指南旨在帮助开源项目办公室领导者提升职业生涯,并且利用他们在担任传统角色时获得的技能,寻求新的职业挑战。 -## Integrating the unique with the standard +## 为开源项目办公室角色定义工作范围 -Organizational variances are common even though patterns in how most companies think about and manage open source are similar. For example, all companies must decide how to handle compliance with open source software distribution, code contributions and code releases. There are also security, talent recruitment, developer relations, and other functions that companies must assign to a team to ensure all goes well. +*“当我为我的团队考虑职业发展时,这对于在公司内部建立开源项目的负责人来说都适用,我认为关键在于我们该如何有意识地扩大或缩小办公室的职能范围,以促进其他需要完成的工作,* **Twitter 的开源负责人威尔·诺里斯说。他此前担任谷歌的开源工程经理。** -"There's all these different things that every company deals with. But the subset of those things that happen to fall within the open source office is what's different at every company," said Norris. Google’s OSPO is an example of a team focused on engineering and compliance. A separate team handles the program side at Google. +开源项目办公室的职能范围会随着时间推移而扩展、收缩或者变化,挑战在于定义特定开源任务的工作范围,因为其中有许多工作超出了传统职位描述的范围,甚至超出了组织本身的范畴。例如,工程师为外部项目贡献代码,或者从事社区管理的人员,或者做其他更注重外部工作的人员。 -Norris said that while some companies prefer the compliance and legal side of open source to be generally handled by the legal team, Google has a legal team within its open source office. +诺里斯 说:*“当有人做了大量外部工作时,我们发现,如何帮助这些成果被看见,从而使他们获得应有的认可并助力其职业发展,这是一个真正的挑战。”* -Another example: some companies choose to make their developer relations (AKA DevRel) group part of their open source office, others do the opposite. Still others, like Google, keep the two groups separate. +谷歌应对这一挑战的方法之一是通过一个开源委员会,该委员会由公司成立于 2019 年。该委员会由来自公司不同开源角色的代表组成,以便他们能够合作解决共同的挑战。 -"At Google, we're very closely related. And then we have a long history of those two groups working very closely together, but we're actually not part of the same group," Norris explained. +诺里斯 解释道:*“我们现在有一个新的工作小组,其重点正是如何帮助提升那些更注重外部工作而非内部工作的人员的工作可见度。其中一些举措实际上是改变谷歌的职业发展阶梯,加入相关描述,真正认可社区贡献和开源工作。”* -The relationship between standards and open source software also tends to be very close, but companies may decide to consolidate standards within their open source office, or distribute it among several teams. +开发有用的开源职业阶梯并不是如列举工作职责和责任那么简单和直接。但是开源项目办公室经理们必须从某个地方开始着手。 -"At Google, that's actually distributed and mostly for a historical reason, since that is the way that standards have worked at Google," Norris said. +**红帽开源项目办公室高级总监德博拉·布莱恩特说**:*“我们所做工作的一部分是确定红帽(Red Hat)内部已经存在的技术项目管理的职位类别。这是因为人力资源部门不能凭空创造一个新的职位分类,他们必须采用行业标准,比如由 IEEE 或其他行业指南规定的标准。”* -The diversity in how companies organize open source duties and responsibilities between individuals and teams drives the development of their OSPO career ladders. +但是,开源项目办公室通常使用的职位名称也进一步模糊了前进的道路。 -"Within our open source programs office we don't have specific job ladders or even lenses on our job ladders that are unique to open source. Pretty much everyone in our open source office is either a traditional software engineer, or a program manager. So we use Google's standard software engineering and program management ladders. And one of the reasons we do that is because at Google, as a company, has always valued mobility within the company," Norris added. +布莱恩特说:*“没有人会真正喜欢‘社区经理’这个头衔,因为我们都知道你实际上无法管理一个社区。社区有它自己的生命,有自己的想法和意愿。”* -Ultimately, organizing the OSPO and integrating it with related functions requires an unwavering focus on the company’s mission and goals. +布莱恩特补充道:*“你实际上是去支持社区,而不是管理它。因此,如何命名这个职位一直存在争议。但是我们选择了‘社区架构师’这个头衔。”* -For example, Google OSPO’s core mission is to bring all of the value of open source to Google, and all of the resources of Google to open source. +尽管厘清职位头衔是关键的第一步,但将这些职位与现有的职位描述相匹配往往是一项让人感到困惑的工作。然而,在许多组织中,专门为开源项目办公室添加新的职位类型通常会成为一个不可逾越的障碍。但这并不意味着这项任务不可能完成。 -"That mission doesn't change. In recruiting, I'm really looking for someone who cares about the problems of open source, and the kinds of things that we're doing. We love adding fresh perspectives too. The tools that we use will change, the languages that we program in will change. Plus Google has a lot of homegrown systems in our engineering stack, so most new employees are going to have to learn a lot of that stuff anyway. That makes it totally okay to have some folks in our open source office who are new to open source too," said Norris. +布莱恩特从一开始就在发展红帽开源项目办公室的职业阶梯方面起着重要作用。在她 2014 年加入公司时这一职业阶梯并不存在,但是内部的需求已经很高。她说,他们使用工程职业阶梯作为他们的初始框架,但是这并不完全适合。 -Whether OSPO staff and recruits are deeply experienced or brand new to open source, mapping skill categories to resemble the standard, traditional roles but that also integrate the unique skills and duties associated with open source are essential to talent recruitment, retention, and career advancement within the office specifically and in the organization and industry at large. +布莱恩特说:*“最显著的的区别在于社区经理实际上不产出代码。有时他们会在工作中偶尔编写代码,有时他们会将其作为兴趣爱好,但是他们的核心职责不是产出代码。”* -## Mapping Skill Categories +她补充道:*“因为产出代码是工程师职业发展道路上的关键组成部分,这使得社区管理者很难通过晋升流程得到提升,因为在晋升决策和职业晋升要求中,有一部分是基于代码贡献的,尽管并非全部。”* -Senior leaders need to help their reports recognize how their skills and daily work map to the work done by others in the organization, and how their work complements those functions while adding distinct value to the business. +## 重新调整现有职业阶梯以适应开源环境 -*"We classify all of our OSPO staff as technical program managers because that's a well-understood skill set in technical organizations and because our OSPO lives in engineering. And so there are CDs of steps within that, from PM-1 all the way to PM-6, which is like a senior director,"* said **Nithya Ruff, Executive Director, OSPO at Comcast.** +布莱恩特说:“她和她的团队着手创建一个反映这些元素的职业发展路径。他们调整了工程职业发展路径,使社区经理的职业发展路径也能反应类似的技能。” -Indeed, Ruff advocates for OSPOs to report to the CTO or the SVP of engineering, rather than to marketing or legal. +布莱恩特说:*“基本上,有一个能力矩阵,展示了一个人的领导能力,合作能力,社区贡献能力和技术敏锐度应该达到什么水平。然后,在这个矩阵上,会描述这个人应该达到的技能水平。因此,我们把这个非常复杂的能力矩阵进行修改,以反映我们社区经理或者我们所说的社区架构师应具备的一些技能。”* -*"OSPOs should have a very high reporting structure because it's a pretty big cultural change and you cannot do that without having support from the top. It must be a strategic and important initiative for the company. Having that kind of air cover is important,"* said Ruff. +从一开始就采用大量和广泛的合作来塑造职业阶梯,最终它会成为有用的招聘和升职工具。 -In any case, the first step is breaking down the skills an OSPO staff member uses in their daily functions and fitting those into well understood skill buckets in other company departments or divisions. +布莱恩特说:“这个职业阶梯经过了同行评审和一个非常严谨的流程,以确保它不仅能为社区架构领域的人员创造职业发展道路,表彰他们的成就,而且还能使他们在公司内部通过这种模式获得更高的薪酬。” -*"From there, employees can work with their managers to grow their skills in domains that support OSPOs service work within the company while deepening their own expertise in a particular area,"* said **Leslie Hawthorn, Senior Principal Technical Program Manager, Open Source Program Office, Office of the CTO at Red Hat.** +一旦 为开源项目办公室团队完成了职业阶梯的设定,并且根据此标注进行了人员晋升,其他拥有开源人才的部门也对此表现出了兴趣。 -## Example: Mapping the Skills of a Community Manager +布莱恩特说:*“当看到该职业阶梯被公司其他领域的其他团队也采用,真是令人非常欣慰。”* -Job titles at Comcast are closely equated to more traditional roles in engineering to assist in identifying skill sets in easily recognizable terms. The succession steps are also similar. For example OSPO staff are classified as technical program managers and progress on a scale starting at entry level PM-1 and ending at PM-6, the equivalent of a senior director. +秉承开源的初衷和红帽公司的文化,公司的职业指南是一项持续进行的工作,受到许多声音的影响,大家共同努力不断完善对实用工具的定义。布莱恩特还建议,无论你是刚开始制定开源项目办公室职业发展指南,还是正在对其进行多次迭代,都应该从相同的核心点开始着手。 -*"We can pass people through that route but unless there are big divisions in a company where you can say, okay, you can go be the OSPO leader in division A, then it's very hard to find a role for yourself beyond just being at that top end of your community manager role or top end of your compliance manager role,"* said Ruff. +布莱恩特说道:*“首先要透彻理解您真正需要开源项目团队做什么。这可能因公司而异。有些公司主要在监管方面开展工作,如许可证合规和其他工作。我的团队并不从事这些工作。对我来说,有一组核心技能对我来说很重要,其他办公室也一样。”* -Internally, the job title is always program manager at Comcast and closely tied to engineering roles, but externally the titles are aligned with other OSPOs, according to Ruff. The external titles are commonly community managers, compliance managers, or devrel, which is short for developer relations. +## 将独特与标准相结合 -*"It is important to parse the newer title of dev rel out and determine what it means to OSPOs and in terms of traditional role counterparts. Is it the same or different as a community manager? Can the OSPO charter be broadened to include developer relations or to help developers be more effective on different fronts, not just on open source? What about DevOps and agile and other things of that nature? Can the OSPO expand its capacity to fit all that and to encourage the growth of those skillsets too?"* asked Ruff. +尽管大多数公司思考和管理开源的模式存在相似之处,但组织差异仍普遍存在。例如,所有公司都必须决定如何处理与开源软件分发、代码贡献和代码发布相关的合规性问题。此外,公司还必须将安全、人才招聘、开发者关系和其他只能分配给某个团队,以确保一切顺利。 -For the moment, many companies employ community managers to focus on program management for their open source activities. The tasks for each community manager vary from organization to organization, but the work falls into well understood skill buckets. +诺里斯说:“每家公司都会面对各种不同的问题。但恰好落在开源办公室职责范围内的事情,每家公司的情况都不仅相同。”谷歌的开源项目办公室就是一个专注于工程和合规的团队的例子。在谷歌,另有一个团队负责处理项目方面的工作。 -1. **Product Management, Marketing and Sales:** Product management requires knowledge, use and management of metrics, user feedback and feature requests, and bridge building between power users and developers for product improvement and innovation. Product marketing requires raising overall awareness of the project, developing and implementing content strategy (blogs, social media, YouTube videos, etc), and measuring reach and engagement. These are the same skills used by many Community Management professionals in managing and promoting an open source project. +诺里斯说:“尽管一些公司偏向于由法务团队来总体负责开源合规性和法律事务,但谷歌在起开源办公室内部设有一个法务团队。” -Community management professionals also use skills similar to those used in product sales. These professionals are "selling" a very discerning audience on the nature and virtues of the project and the reasons their “prospect” should contribute to or use this project rather than another. Many community management professionals must be successful at collecting leads at events, ensuring their presentations and content comes across as genuinely educational rather than as a blatant sales pitch, and that their one-on-one relationships are supportive of deal flow, be that deal onboarding a new contributor or executing a new sales contract. +另一个例子:一些公司选择让开发者关系(也称为 DevRel)团队成为其开源办公室的一部分,而其他公司则相反。还有一些公司,例如谷歌,则让两个团队保持独立。 -2. **Strategic Partner Management:** Open source communities may include many volunteers, but that doesn’t mean they don’t function on business principles. Corporate partners are an important part of a project’s success, and they expect mutual benefit. Community management pros must be attuned to the goals of corporate partners and how they align with the goals of the community as well as with other corporate partners. Management issues can be delicate to handle but they also must be resolved to the benefit of all and not just a few. Preferably without losing a partner or sponsor. +诺里斯解释道:“在谷歌,我们关系很密切。同时,这两个团队长期以来一直紧密合作,但我们实际上并不是同一团队的一部分。” -3. **Evangelism and Sponsor Relations:** Evangelism differs from sales in that it is focused on promoting the community and the work of others rather than directly on the project. It involves, among other things, developing coordinated community and project messaging, determining the best means to get the messaging distributed internally and externally, and actively promoting the work of other people and organizations who are advocating for the project. Managing sponsor relations to aid with fundraising for project activities or an affiliated Foundation is a top priority. This requires a near-constant external sponsorship search to support events and a pressing need to develop protocols and policies to determine which sponsors are most appropriate. +标准和开源软件之间的关系也往往十分紧密,但是公司可能会决定在开源办公室内部统一标准,或者将其分发给多个团队。 -4. **Field Enablement and Support:** Many community management professionals also provide support for project members ranging from technical assistance to dispute resolutions. A big part of most community management professionals’ duties is resolving conflicts between the various volunteer members. This requires both policy-making skills and conflict resolution skills. Further, new members need to be onboarded, welcomed, and encouraged so that they stay interested and contribute to the community in meaningful ways. Talent recruitment and retention are also important functions to ensure the community thrives and the project gains market respect and broad support. +诺里斯说道:“在谷歌,标准是由多个团队来负责的,这主要是出于历史原因,因为谷歌的标准工作一直以来都是这样进行的。” -Community managers also provide field support as technical experts for customers. Further, they develop processes designed to provide educational services to Solution Architects and solicit code contributions from customers. These skills are currently in high demand in every organization. +公司如何组织个人和团队之间的开源职责和任务的多样性,驱动了其开源项目办公室职业阶梯的发展。 -Documentation is essential to the success of any project. The skills necessary to provide or oversee documentation include writing, vetting, distribution, and delineating corporate value versus community value within the documentation. Community management professionals may also find themselves to be proficient editors and good at finding and recruiting writers to focus on documentation. +诺里斯补充道:“在我们的开源项目办公室内部,我们没有为开源设置特定的职业阶梯或者职业阶梯视角。我们的开源办公室里的员工几乎都是传统的软件工程师或项目经理。所以我们使用谷歌的标准软件工程师和项目经理职业阶梯。我们这么做的原因之一是,谷歌作为一家公司,一直重视员工在公司内部的移动性。” -5. **Finance and Budgeting:** Most community managers are responsible for budgets that cover everything from convening events to T&E (travel and expenses) for the talks they give at conferences. Budgets must be balanced and allocated fairly. Some examples of tough budget provisioning are determining how to reimburse community contributors globally, maximizing return on spend for marketing and other activities, and maintaining a financial cushion to enable a fast response to opportunities as warranted. +最终,组织开源项目办公室并将其与相关职能整合在一起,需要坚定不移地关注公司的使命和目标。 -The various professional roles in community management entail some or all of these functions and skills. Yet their skills are rarely itemized so that they can be recognized, developed and promoted separately as noted accomplishments worthy of job advancement. By itemizing these skills and experiences, the resulting buckets labeled with traditional job roles will give each report a very good idea where their strengths and weaknesses lay, and where their preferences are in particular task categories. +例如,谷歌开源项目办公室的核心使命是将开源的所有价值带给谷歌,同时将谷歌的所有资源用于开源。 -This information will go far in selecting and directing a path aimed at progressing up the career ladder. It will also be valuable to the OSPO senior leader looking to build out a job ladder for those in their organization. +诺里斯说道:“这一使命不会改变。在招聘中,我真的在寻找那些关心开源问题以及我们正在做的事情的人。我们也欢迎加入新的观点。我们使用的工具将变化,我们编程使用的语言也会改变。此外,谷歌的工程栈中有很多自主研发的系统,因此大多数新员工都需要学习很多这些东西。这使得我们的开源办公室中有一些对开源不太了解的人也是完全可以的。” -## Retaining and Promoting Your OSPO Professionals: Job Ladders +无论开源项目办公室的员工和招募人员是否具有丰富的开源经验,还是新手,将技能类别映射到类似的标准和传统的角色,同时整合与开源相关的独特的技能和职责,这对于办公室内部、整个组织以及整个行业的人才招聘、留任和职业发展至关重要。 -OSPO staff are in high demand. Yet it is often easier for them to change employers in order to advance their careers than to move ahead where they are. While such career moves are understandable, they are counterproductive for the organizations that are left behind. +## 映射技能类别 -*"A lot of us tend to circulate in the industry. That’s because currently the main way to grow is to move to a position of open source program office leader in another company, typically one that is just beginning to start their open source office. And that's a great jump because then you become the leader and you start your own team,"* said Ruff. +高级领导者需要帮助他们的下属认识到,他们的技能和日常工作是如何与组织中其他人的工作相匹配的,以及他们的工作是如何在补充这些职能的同时为业务增添独特价值的。 -Ultimately it is the companies that offer the highest rungs in the career ladder that tend to net big talent. +**康卡斯特开源项目办公室的执行董事尼提亚·拉夫说道,** *我们将所有开源项目办公室员工归类为技术项目经理,因为这是一个在技术组织中广为人知的技能组合,而且我们的开源项目办公室扎根于工程领域。因此,在这个分类中有一系列等级,从 PM-1 到 PM-6,相当于高级主管。* -*"In my case, I came in as a senior director and then was promoted to executive director, and then the next path becomes vice-president and chief open source officer,"* Ruff explained. +确实,拉夫主张开源项目办公室应当向首席技术官或者高级副总裁汇报工作,而不是向营销部或者法务部。 -But most organizations, a chief open source officer or a VP type of role isn’t merited. More often the top positions are director or senior director roles. +拉夫说道:*“开源项目办公室应该有非常高的报告结构,因为这是一个相当大的文化改变,如果没有来自高层的支持,你就无法完成它。它必须是公司的一个战略和重要的倡议。拥有这样的空中掩护是非常重要的。”* -*"You can also broaden these roles to take on open source standards, or join other open innovation work at universities or at other research projects that the company invests in externally. That then becomes a nice meaty role,"* says Ruff. +无论如何,第一步是分解开源项目办公室员工在日常工作中使用的技能,并将这些技能归入公司其他部门或者分部的已熟知技能范畴。 -*"I believe that at Microsoft, legal counsel has open source standards as well as open source work under the same umbrella. So I can see that kind of consolidating becoming a broader charter for the open-source program office,"* Ruff added. +“之后,员工可以与他们的经理合作,提升支持开源项目办公室在公司内部服务工作的技能,同时深化自己在特定领域的专业知识。” 红帽首席技术官办公室开源计划办公室高级首席技术项目经理莱斯利·霍索恩表示。 -But even when OSPO professionals do move to a new organization, opportunities to advance to executive director, VP or Chief Open Source Officer are few. +## 示例:映射社区管理者的技能 -*"I've seen OSPO members go on to become executive directors at foundations like Guy Martin did. He went from being an OSPO leader at Autodesk to being an executive director at Oasis Open. And Shubhra Kar went from Samsung to the Linux Foundation. Those are the two routes I've seen work, but I haven't seen anything else beyond those,"* said Ruff. +康卡斯特的职位名称与工程领域的传统的角色密切相关,有助于以易于识别的属于确定技能组合。继任步骤也类似。例如,开源项目办公室的员工被归类为技术项目经理,并在从初级 PM-1 到高级 PM-6 的等级制度中晋升,相当于高级主管。 -## Guide reports on building their personal brand +拉夫说:“我们可以通过这条路径培养人才,但除非公司内部存在大的部门划分,比如可以说,好的,你可以去 A 部门担任开源项目办公室负责人,否则,除了担任社区经理或合规经理等职位的高级职位之外,很难找到更合适的角色定位。” -It’s no secret that open source professionals are in high demand across industries. But that doesn’t mean individuals or their projects can necessarily prosper without active and sustained promotion. +据拉夫介绍,在内部,该职位名称始终是项目经理,与工程角色密切相关,但在外部,该职位名称与其他开源项目办公室保持一致。外部职位名称通常为社区经理、合规经理或者技术布道师,后者是开发者关系的简称。 -In order to gain the recognition and visibility needed for opportunities to find any given individual – or for that individual to promote themselves to higher opportunities, they must actively promote their personal brand. +*“重要的是解析出开发者关系这个新职位名称,并确定它对开源项目办公室以及传统角色的对应者意味着什么。它与社区经理的职位是否相同或不同?开源项目办公室的章程是否可以扩大,以包含开发者关系或帮助开发者在多个方面提高有效性,而不仅仅是开源方面?那么 DevOps、敏捷开发和其他的东西呢?开源项目办公室是否能够扩大其能力来适应所有这些,并鼓励这些技能集的发展?”* 拉夫问道。 -The returns from OSPO leaders guiding reports on how to build their brand are equally strong for the team, project, and company too. When OSPO leaders actively and visibly demonstrate an interest in their reports’ career development, individual and team morale and performance improve significantly. As reports become more recognizable and respected brands, the project’s brand rises too. +目前,许多公司都雇佣社区经理来专注于其开源活动的项目管理。每个社区经理的工作任务因组织而异,但他们的工作都可以归入一些列为人熟知的技能内别。 -Further, a large part of any project’s success is attributable to its ability to attract and retain developers and other professionals. Having professionals on your staff with highly visible and respected personal brands will go far in attracting more talent to your project. +1. **项目管理,市场营销和销售:** 项目管理需要知道、运用和管理各种指标、用户反馈和功能需求,并在高级用户和开发人员之间建立桥梁,以推动产品改进和创新。产品营销需要提高整个项目的知名度,制定并执行内容策略(博客,社交媒体,YouTube 视频等),并衡量影响力和参与度。这些技能也是许多社区管理专业人士在管理和推广开源项目时所使用的。 -OSPO leaders can also lighten their own workloads and multiply project and company branding efforts by sending their reports out on speaking opportunities and for public appearances representing the company. By actively assisting reports in building a strong public persona, OSPO leaders ensure everyone wins. +社区管理专业人士也使用与那些在产品销售中相似的技能。这些专业人士正在向一群非常挑剔的受众“推销”项目的本质和优点,以及他们的“潜在客户”为何应该为此项目而不是其他项目做出贡献或使用此项目的原因。许多社区管理专业人士必须在活动中成功收集线索,确保他们的展示和内容能够真正传达出教育的意涵,而非明显的销售宣传,并确保他们的一对一关系能够支持交易流程,无论是接纳新的贡献者还是执行新的销售合同。 -## OSPO Leader Networking +2. **战略合作伙伴管理:** 开源社区可能包含许多志愿者,但是这并不意味着他们不按照商业原则运作。企业合作伙伴是项目成功的重要组成部分,他们期待互惠互利。社区管理专业人士必须关注企业合作伙伴的目标,以及它们与社区目标以及其他企业合作伙伴的目标之间的默契程度。管理问题可能需要小心处理,但也必须解决,以使所有人受益,而不仅仅是少数人。最好是在不失去合作伙伴或者赞助商的情况下解决。 -Successful OSPO leaders network with their peers to promote themselves, mentor other leaders, and discover new ways to support their own reports. The TODO Group is "the great watering hole for OSPO leaders and frankly all OSPO members," said Ruff. +3. **宣传与赞助关系:** 宣传与销售不同,它侧重于推广社区和他人的工作,而不是直接推销项目。它包括但不限于制定协调的社区和项目信息传递、确定最佳的内部和外部信息传递方式,以及积极推动为项目发声的其他个人和组织的工作。管理赞助关系以帮助筹集项目活动或附属基金会的资金是头等大事。这需要进行近乎持续的寻求外部赞助,以支持活动,并迫切需要制定协议和政策,确定哪些赞助商最合适。 -The focus in this type of networking is on common issues, challenges, and successes. Competitors not only work together, they seek out such opportunities to advance their own projects in the most efficient way possible. Open source competencies are viewed as separate and apart from core intellectual property (IP) or protected IP. +4. **现场赋能和支持:** 许多社区经理专业人员还为项目成员提供支撑, 范围从技术支持到纠纷解决。社区管理专业人员的一个重要职责就是解决不同志愿者之间的冲突。这既要求制定政策的技能,也需要解决冲突的技能。此外,新成员需要得到入职指导、欢迎和鼓励,以至于他们能够保持兴趣并以有意义的方式为社区做出贡献。人才招聘和留任也是确保社区蓬勃发展、项目赢得市场尊重和广泛支持的重要职能。 -*"Just recently, three or four OSPOs came to me wanting to compare notes. Disney, one of our competitors, asked to compare notes on our respective OSPOs. Verizon Media, another competitor, did the same. And so did JP Morgan Chase & Co and Office Depot, both of which were just setting up their OSPOs. We're happy to mentor and support them."* said Ruff. +社区经理也作为技术专家为客户们提供现场支持。此外,他们还制定流程,旨在为解决方案架构师提供教育服务,并从客户们那里请求代码贡献。这些技能目前在每个组织都很受欢迎。 -*"I think that's wonderful. And we were very candid with each other because there is nothing secret about it and we want them to succeed. We want this whole industry of media and entertainment to succeed"* Ruff added. +文档对于任何项目额成功都至关重要。提供或监督文档所需要的技能包括撰写、审核、分发和在文档中界定企业价值和社区价值的区别。社区管理专业人士可能也会发现自己擅长编辑,并擅长寻找和招募专注于文档编写的作者。 -## Mapping futures +5. **财务和预算:** 大多数社区经理负责涵盖从召开活动到在会议上发表演讲的差旅与费用(T&E)等各方面的预算。预算必须平衡和公平分配。一些预算配置的困难例子包括确定如何全球范围内对社区贡献者进行报销、最大化营销和其他活动的支出回报,并保持财务储备以便根据情况快速应对机会。 -OSPOs win on several fronts when they crystalize career paths for staff. Skill sets within the office expand making it possible to do more with more, even if the head count doesn’t grow too. Employee experience improves dramatically which in turn improves both recruitment and retention rates. Professional networks grow larger and stronger as more reports come into their own leadership roles later. Succession plans become easier tasks. Organizations benefit from expanding and maturing skill sets as they move forward with their open source projects and plans. +社区管理中的各种专业角色涉及一些或所有这些职能和技能。然而,他们的技能很少被列明,以便能够被认可、发展和单独推广为值得职业发展的成就。通过逐项列明这些技能和经验,以传统职位角色标记的结果将使每个报告者非常清楚地了解自己的优势和劣势所在,以及他们在特定任务类别中的偏好。 -When OSPO managers take the time and make the effort to shape clear career paths for their staff, everyone wins. +这些信息将在选择和指导职业发展路径方面大有裨益。对于希望为组织中的成员建立职业晋升路径的开源项目办公室的高级领导者来说,这也将是非常有价值的。 -## Acknowledgements +## 保留和提升您的开源项目办公室专业人员:职业阶梯 -**Contributors to this guide:** +开源项目办公室的员工需求量很大。然而,对于他们来说,更容易通过换雇主来推动自己的职业发展,而不是在原来的地方取得进步。虽然这样的职业转变可以理解,但对于留下的组织来说却是适得其反的。 +*“我们很多人倾向于在行业内流动。这是因为目前成长的主要途径是转移到另一家公司担任开放源代码项目办公室负责人的职位,通常是一家刚开始建立开放源代码办公室的公司。这是一个很大的进步,因为这样你就成为了领导者,可以组建自己的团队,”* 拉夫说道。 + +最终,能够提供职业阶梯上最高层的公司往往能吸引到顶尖人才。 + +拉夫解释道:*“以我的情况为例,我最初是作为高级总监加入的,然后晋升为执行总监,接下来的职业发展路径是副总裁兼首席开源官。”* + + +但是,在大多数组织,担任首席开源官或者副总裁级别的职位并不常见。通常见的是总监或者高级总监的职位。 + +拉夫说道:*“你还可以扩大这些职位的范围,涉及开源标准,或者参与公司在外部投资的其他开放创新工作,比如大学或者其他研究项目。这样你就可以担任一个非常丰富多彩的角色。”* + +拉夫补充道:*“我相信在微软,法律顾问负责制定开源标准以及开源工作,统一归属于同一个部门。因此,我可以看到这种整合会成为开源项目办公室更广泛职责的一部分。”* + +即使开源项目办公室专业人员转到新的组织,晋升为执行总监,副总裁或者首席开源官的机会也很少。 + +拉夫说道:*“我见过开源项目办公室成员进入基金会担任执行总监,就像 盖·马丁 所做的那样。他从 Autodesk 的开源项目办公室负责人转到了 Oasis Open 担任执行总监。舒布拉·卡尔从三星转到了 Linux 基金会。这是我见过行之有效的两条路线,但除此之外我没有看到其他情况。”* + +## 建立个人品牌的指导报告 + +众所周知,开源专业人员在各行各业都备受青睐。但这并不意味着个人或他们的项目可以在没有积极和持续的推广的情况下取得成功。 + +为了获得所需的认可和曝光,以便为个人找到机会,或者让个人向更高的机会推销自己,他们必须积极推广自己的个人品牌。 + +对开源项目办公室领导指导下属如何建立品牌的报告的回报,同样对团队、项目和公司也是巨大的。当开源项目办公室领导积极可见地表现出对下属职业发展的关注时,个人和团队的士气和业绩会显著提高。随着下属成为更受认可和尊重的品牌,项目的品牌也会提升。 + +此外,任何项目成功的很大一部分归功于其吸引和留住开发人员和其他专业人员的能力。拥有个人品牌高度可见且备受尊重的专业人员将大大有助于吸引更多人才加入项目。 + +开源项目办公室的领导还可以通过为下属安排演讲机会和公开露面代表公司,减轻自己的工作负担,并增加项目和公司的品牌推广力度。通过积极帮助下属建立强大的公众形象,开源项目办公室的领导确保每个人都是赢家。 + +##开源项目办公室领导者的网络建立 + +成功的开源项目办公室领导者与同行建立社交网络,推广自己,指导其他领导者,并发现支持自己下属的新方法。TODO 小组是“所有开源项目办公室领导者,事实上是所有开源项目办公室成员的大型聚集地”,拉夫说道。 + +这种类型的网络建立侧重于共同的问题、挑战和成功经验。竞争对手不仅合作,还寻求这样的机会,以最高效的方式推动自己的项目发展。开放源代码的能力被视为与核心知识产权(IP)或受保护的知识产权分开。 + +*“就在最近,有三四个开源项目办公室来找我想要交换意见。迪士尼,我们的竞争对手之一,要求比较我们各自的开源项目办公室情况。另一个竞争对手,威瑞森媒体也是如此。JP 摩根大通和 Office Depot 也是,他们两家公司都刚刚建立了自己的开源项目办公室。我们很乐意指导和支持他们。”* 拉夫说道。 + +“我认为这很棒。我们彼此非常坦诚,因为这并不是什么秘密,我们希望他们成功。我们希望整个媒体和娱乐行业都能取得成功。” 拉夫补充道。 + +## 未来规划 + +当开源项目办公室为员工明确规划职业道路时,它们在多个方面都能取得成功。办公室内部的技能组合得以扩展,即使人员数量不增加,也可以做更多的事情。员工的经验显著提高,这进而提高了招聘和留住员工的比率。专业网络随着更多的下属晋升到领导职位而变得更大更强。继任计划变得更加容易。随着他们推进开源项目和计划的步伐,组织受益于扩展和成熟的技能组合。 + +当开源项目办公室经理花时间和精力为员工制定清晰的职业道路时,每个人都会受益。 + +## 致谢 + +**本指南的贡献者** + +* [Amye Scavarda](https://twitter.com/amye) * [Amye Scavarda](https://twitter.com/amye) * [Chris Aniszczyk](https://twitter.com/cra) +* [Chris Aniszczyk](https://twitter.com/cra) +* [Will Norris](https://www.linkedin.com/in/willnorris/) * [Will Norris](https://www.linkedin.com/in/willnorris/) * [Leslie Hawthorn](https://www.linkedin.com/in/lesliehawthorn/) +* [Leslie Hawthorn](https://www.linkedin.com/in/lesliehawthorn/) +* [Deborah Byant](https://www.linkedin.com/in/opengovernment/) * [Deborah Byant](https://www.linkedin.com/in/opengovernment/) * [Nithya Ruff](https://www.linkedin.com/in/nithyaruff/) +* [Nithya Ruff](https://www.linkedin.com/in/nithyaruff/) +* [Greg Back](https://www.linkedin.com/in/gregback/) * [Greg Back](https://www.linkedin.com/in/gregback/) diff --git a/content/zh-CN/guides/create-program.md b/content/zh-CN/guides/create-program.md index 98e79384..cb7547ec 100644 --- a/content/zh-CN/guides/create-program.md +++ b/content/zh-CN/guides/create-program.md @@ -1,261 +1,281 @@ --- -title: How to create an open source program office +title: 创建开源办公室指南 --- -A central open source program office is a designated place where open source is supported, nurtured, shared, explained, and grown inside a company. With such an office in place, businesses can establish and execute on their open source strategies in clear terms, giving their leaders, developers, marketers, and other staff the tools they need to make open source a success within their operations. +集中式的开源办公室是一个专门支持、培育、共享、解释和发展开源的地方。有了这样的办公室,企业可以明确制定和执行他们的开源策略,为领导者、开发人员、营销人员和其他员工提供所需的工具,使开源在他们的运营中取得成功。 + +本指南旨在帮助你了解为什么以及如何建立一个计划,来管理公司内部的开源使用和创建,并展示你的开发人员如何在公司运营之外对开源项目做出自己的贡献。它将涵盖开源专项办公室的各个主题,包括:角色和职责、公司结构、开源管理计划的要素、如何选择和雇佣开源项目经理等。 + +**目录** +- [为什么创建开源办公室](#为什么创建开源办公室) +- [开源办公室的角色](#开源办公室的角色) +- [案例:谷歌开源计划](#案例谷歌开源计划) +- [建立开源办公室](#建立开源办公室) + - [1.寻找一位领导者](#1寻找一位领导者) + - [2. 定义你的运营](#2-定义你的运营) + - [3. 寻求反馈和获得支持](#3-寻求反馈和获得支持) +- [项目结构](#项目结构) + - [法律部](#法律部) + - [工程部门](#工程部门) + - [开发者关系、市场营销或传播部门](#开发者关系市场营销或传播部门) +- [管理角色](#管理角色) + - [项目经理](#项目经理) + - [法律](#法律) + - [合规团队](#合规团队) + - [开发者关系、倡导和传播者](#开发者关系倡导和传播者) + - [Others](#others) + - [其他](#其他) +- [设定政策和流程](#设定政策和流程) + - [发布代码的政策](#发布代码的政策) + - [接受贡献的政策](#接受贡献的政策) + - [促进采用的政策](#促进采用的政策) + - [内部使用的政策](#内部使用的政策) + - [合规政策](#合规政策) +- [结束语](#结束语) +- [开源项目职位列表样例](#开源项目职位列表样例) +- [致谢](#致谢) + +## 为什么创建开源办公室 +如今,开源软件应用广泛,包括从零售到金融再到汽车等各行各业的公司。然而,对于负责运营的高管领导和决策者来说,开源软件并不总是被完全理解。 + +一个核心问题是,企业制定和遵循传统的商业计划来指导开源项目的运营和目标,但开源软件可能令人困惑。开源创新有其自身的方法论,并不遵循传统的业务流程。其最大差异之一是开源开发是协作性的,而传统的软件和商业实践是专有且封闭的。对于许多企业来说,在使用开源时所需的理念转变并不容易或自然而然地发生 + +这就是创建开源办公室可以带来重大好处的地方。通过创建开源办公室,企业可以启用、简化和组织开源的使用方式,使其与公司的长期商业计划直接相关。开源办公室旨在成为公司开源运营和组织架构的中心,帮助把所有必要的组件整合在一起。 + +这可以包括设置代码使用、分发、选择、审计和其他政策,以及培训开发人员、确保法律合规性和促进与建立社区参与。办公室还可以提供关于公司内部和外部所有开源事宜的宣传和沟通。 -This guide aims to help you figure out why and how to establish a program to manage the open source use and creation inside your company, as well as to show how your developers can make their own contributions to open source projects outside your operations. It will cover topics for open source offices including: roles and responsibilities, corporate structures, elements of an open source management program, how to choose and hire an open source program manager, and more. - -**Table of Contents** - -- [Why create an open source program office](#why-create-an-open-source-program-office) -- [The role of the open source program office](#the-role-of-the-open-source-program-office) -- [Example: Open source program at Google](#example-open-source-program-at-google) -- [Establishing an open source office](#establishing-an-open-source-office) -- [Program Structure](#program-structure) -- [Management roles](#management-roles) -- [Setting policy and processes](#setting-policy-and-processes) -- [Final words](#final-words) -- [Example open source program job listing](#example-open-source-program-job-listing) -- [Acknolwedgements](#acknolwedgements) - -## Why create an open source program office - -Open source software is widely used today by companies in a broad range of industries from retail to finance to automotive, and more. However, it’s not always fully understood by the executive leaders and decision-makers running the operations. - -A key problem is that, while enterprises develop and follow traditional business plans which dictate their operations and goals, open source software can be baffling. Open source innovation has a methodology of its own and doesn’t follow traditional business processes. One of its biggest differences is that open source development is collaborative, while traditional software and business practices are proprietary and closed. For many businesses, the needed change in philosophy when approaching open source use doesn’t come easily or naturally. - -That’s where the creation of an open source program can be a major boon. By creating an open source program office, businesses can enable, streamline and organize the use of open source in ways that tie it directly to a company’s long-term business plans. An open source program office is designed to be the center of the universe for a company’s open source operations and structure, helping to bring all the needed components together. - -This can include setting code use, distribution, selection, auditing and other policies, as well as training developers, ensuring legal compliance and promoting and building community engagement. The office can also provide advocacy and communications about all things open source inside and outside the company. - -> “The open source program office is an [essential part of any modern company](https://opensource.com/business/16/5/whats-open-source-program-office) with a reasonably ambitious plan to influence various sectors of software ecosystems. If a company wants to increase its influence, clarify its open source messaging, maximize the clout of its projects, or increase the efficiency of its product development, a multifaceted approach to open source programs is essential.” -> > -– John Mark Walker, founder of the Open Source Entrepreneur Network (OSEN). +> +> “开源办公室是[任何现代公司的至关重要的一部分](https://opensource.com/business/16/5/whats-open-source-program-office),尤其是那些有着相当雄心壮志,计划影响软件生态系统各个领域的公司。如果一家公司想要增加影响力、明确开源信息、最大化其项目的权威性,或提高产品开发的效率,那么采取多方面的开源项目方法是至关重要的。” +> +> —— 约翰·马克·沃克,开源企业家网络(OSEN)创始人。 -## The role of the open source program office +## 开源办公室的角色 -Ultimately, a well-organized open source program office is valuable because it can advance open source use, contribution, and creation inside companies for strategic advantage. +最终,一个组织良好的开源办公室之所以有价值,是因为它能够在公司内部推动开源的使用、贡献和创造,从而获得战略优势。 -A successful office can greatly benefit corporate open source use by establishing processes that enable developers and their teams. It encourages standard coding and organizational practices, processes, and toolsets. At the same time, a program office can help avoid or remove unneeded, rigid processes which creative developers may circumvent or ignore anyway, threatening security and other aspects of projects. +一个成功的办公室可以通过建立支持开发人员及其团队的流程,极大地促进企业的开源使用。它鼓励标准的编码和组织实践、流程以及工具集。同时,开源办公室也可以帮助避免或移除那些不必要的、僵化的流程,这些流程可能会被创造性开发人员规避或忽视,从而威胁到项目的安全性和其他方面。 -The responsibilities of a program office are varied. These include: +开源办公室的职责是多种多样的。这些职责包括: -* Clearly communicating the open source strategy within and outside the company -* Owning and overseeing the execution of the strategy (see our guide to creating an open source strategy for business) -* Facilitating the effective use of open source in commercial products and services -* Ensuring high-quality and frequent releases of code to open source communities -* Engaging with developer communities and seeing that the company contributes back to other projects effectively -* Fostering an open source culture within an organization -* Maintaining open source license compliance reviews and oversight +* 清晰地传达开源战略给到公司内部和外部 +* 拥有并监督策略的执行(参见我们关于制定商业开源策略的指南) +* 协助开源在商业产品和服务中的有效使用 +* 确保向开源社区发布高质量和及时更新的代码 +* 与开发者社区互动,确保公司有效地回馈其他项目 +* 在组织内培养开源文化 +* 维护开源许可证合规性审查和监督 -For every company, the role of the open source program office will likely be custom-configured based on its business, products, and goals. There is no broad template for building an open source program that applies across all industries — or even across all companies in a single industry. That can make its creation a challenge, but you can learn lessons from other companies and bring them together to fit your own organization’s requirements. +对于每家公司来说,开源办公室的角色可能会根据其业务、产品和目标进行定制配置。没有适用于所有行业的通用开源项目构建模板——甚至在同一行业的公司中也没有通用模板。这可能使其创建过程变得具有挑战性,但你可以借鉴其他公司的经验,并将其结合起来以满足自己组织的需求 -> “There isn’t a one size fits all model. I can’t stand up in front of a crowd and say, ’this is how you should do it,'” – [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the [Open Source Programs Office at Microsoft](https://opensource.microsoft.com/program/). +> “没有一种放之四海而皆准的模型。我不能站在大家面前说,‘这就是你应该怎么做’,”——[杰夫·麦卡弗](https://twitter.com/jeffmcaffer),[微软开源办公室](https://opensource.microsoft.com/program/)主任。 -Microsoft has been working over the last several years to create and refine its own open source approach. With tens of thousands of employees in a wide range of business units, Microsoft’s dedicated open source program office works to assist developers, marketing teams and others who are engaging with open source for cloud services, hardware and software products, games, content, media, and other product lines. Each division requires different assistance based on its individual business models and engagement scenarios, making it impossible to serve them all with the same offerings. +微软在过去几年中一直致力于创建和完善其开源策略。微软拥有数万名员工,涵盖了广泛的业务部门,其专门的开源办公室致力于协助开发人员、营销团队以及其他参与开源的人员,涉及云服务、硬件和软件产品、游戏、内容、媒体和其他产品线。由于每个部门根据其具体的商业模型和参与场景需要不同的支持,因此不可能用相同的方案服务所有部门。 -A key role for the open source program office is to bring substance and facts to the conversation when business units begin to consider open source in their plans so there is a full understanding of why it is being considered, what the consequences will be, and what is needed to reach its goals. It’s often a matter of framing the conversation so that stakeholders know where to start and what to think about as they weigh their decision. +开源办公室的一个关键角色是为业务部门在开始考虑将开源纳入其计划时提供实质性和事实性的支持,以确保对开源的考虑有全面的理解,包括其原因、可能的后果以及实现目标所需的条件。这通常涉及到框定讨论的方向,使相关利益方知道从哪里开始,以及在权衡决策时需要考虑哪些因素。 -The program office can also be a critical liaison between developers and the open source user communities to resolve and understand issues or requirements that arise. The program office can assist with legal issues, provide developer advocacy, and act as a voice for external users who are building on a company’s open source projects. The program office can also help relay that information to others inside the company, including the product management team, to further advance the code. In addition, open source offices are increasingly hiring dedicated developer advocates to focus on making sure that their projects grow and are sustainable. +开源办公室还可以成为开发人员与开源用户社区之间的关键联络人,帮助解决和理解出现的问题或需求。办公室可以协助处理法律问题,提供开发者支持,并代表那些在公司开源项目上构建的外部用户的声音。同时,办公室还可以帮助将这些信息传递给公司内部的其他部门,包括产品管理团队,以进一步推动代码的发展。此外,开源办公室越来越多地招聘专职开发者倡导者,专注于确保项目的增长和可持续性。 ![Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html](/img/guides/creating-an-open-source-program1.png) -## Example: Open source program at Google +## 案例:谷歌开源计划 -At Google, where the use of open source has been central to its mission and success since the company began in 1998, the role of the open source program office is broad. The office was started in 2004 largely as a compliance effort to understand and organize its use of open source licenses and code, according to Will Norris, the manager of the office. Google was much smaller back then and was involved in a wide range of open source projects and code use, but there weren’t many formal compliance processes in play at that time. As the company continued to grow, that lack of compliance and organization had to change, said Norris, who has worked in the office for four years, originally as a software engineer. He became its manager in September 2016. +自1998年公司成立以来,谷歌开源的使用一直是其使命和成功的核心部分,开源办公室的角色非常广泛。根据办公室经理 Will Norris 的说法,该办公室于 2004 年成立,主要是为了遵守合规要求,了解和组织开源许可证和代码的使用。那时的谷歌规模较小,参与了广泛的开源项目和代码使用,但当时并没有许多正式的合规流程。随着公司不断发展,这种缺乏合规性和组织的情况必须改变。Norris 说,他在办公室工作了四年,最初作为软件工程师,2016 年 9 月成为其经理。 -Google runs its open source program office in adherence to three important principles aimed at helping its employees use open source and release open source back to the community, and to support the broader open source ecosystem around the world. That mission has remained constant since the creation of the office, which has only about 15 team members who serve a company with about 72,000 employees. +谷歌的开源办公室遵循三个重要原则,这些原则旨在帮助员工使用开源代码、将开源代码回馈社区,并支持全球更广泛的开源生态系统。这些使命自办公室创建以来一直保持不变,而该办公室仅有大约 15 名团队成员,服务于公司约 72,000 名员工。 -Much of its efforts to keep the open source ecosystem healthy involve hiring qualified and experienced engineers to work on projects, investing sizable amounts of the company’s money in the open source foundations, groups, and projects that need it, while also regularly sponsoring technology conferences which spread the gospel and usefulness of open source software creation. +为了保持开源生态系统的健康,谷歌主要通过以下几种方式进行努力:雇佣合格且经验丰富的工程师参与项目,为需要资助的开源基金会、组织和项目投入大量公司资金,同时定期赞助技术会议,以传播开源软件创建的理念和实用性。 -It also means developing and running programs like [Google’s Summer of Code](https://summerofcode.withgoogle.com/) which provides opportunities for developers around the world to spend their summers creating code with help from mentors who provide training and guidance. +这也意味着开发和运营像[谷歌夏季编程](https://summerofcode.withgoogle.com/)这样的项目,为全球开发者提供机会,让他们在夏季期能在导师的帮助下编写代码,获得导师提供的培训和指导。 -For Google’s open source program office, the Summer of Code is an example of a program which provides direct benefits for its investments – a stream of potential future developers who can one day come to work for the company, armed with experience and some real-world knowledge of how it does open source development. In the open source world, that same strategy can benefit many other companies through similar open source program office investments in the communities in which they participate. +对于谷歌的开源办公室而言,夏季编程项目是一个直接体现投资回报的项目——它培养了一批未来潜在的开发者,这些开发者可以带着经验和对开源开发实际操作的了解,未来有机会成为公司的一员。在开源世界中,这种策略可以通过类似的开源办公室投资,惠及许多其他公司,帮助它们在参与的社区中获得利益。 -Most open source community management at Google happens within its many product teams, with the open source program office giving teams and projects support to follow the paths they want to take. The business goals vary for individual projects based on whether it makes sense to open source a project in each case. Some 2,000 to 4,000 open source projects are typically underway at once at Google. +在谷歌,大多数开源社区管理工作会发生在其众多的产品团队中,而开源办公室则为这些团队和项目提供支持,帮助它们按照自己的方向前进。不同项目的业务目标各不相同,取决于是否在每个案例中开源一个项目。谷歌通常同时进行约2,000 到 4,000个开源项目。 -> “We allow the various business units around the company to make the decision on whether it makes sense to open source a given project from a business perspective, because there’s a lot of different reasons why you might open source a project or a piece of code. We’re comfortable with allowing projects to take the approach that works for them given their goals. We play more of a role of facilitating and advising.” – [Will Norris](https://twitter.com/willnorris?lang=en), open source office manager at Google. +> “因为开源一个项目或代码的理由有很多,我们允许公司内的各个业务部门根据商业角度决定是否开源某个项目。我们乐于让项目根据其目标采取适合他们的方式。我们的角色更多是作为促进者和顾问。” —— [Will Norris](https://twitter.com/willnorris?lang=en),谷歌开源办公室经理。 -The Google program office is made up of a compliance team which includes two lawyers, an outreach team for event participation and an engineering team that builds tooling to automate compliance checks and support the company’s development programs. Another of its important responsibilities is carefully and constantly tracking a wide range of statistics on open source use, including what needs to be built to be compliant and how long it takes for code to be released or brought in. +谷歌的开源办公室由以下几个团队组成:一个合规团队,包括两名律师;一个外展团队,负责活动参与;以及一个工程团队,负责构建自动化合规检查工具和支持公司的开发项目。其另一个重要职责是仔细而持续地跟踪各种开源使用的统计数据,包括需要构建什么以确保合规,以及代码发布或引入所需的时间。 -A recent role being taken on by the Google program office is an interesting initiative which is encouraging all workers who are responsible for open source in their primary jobs – whether they are graphics designers, tech writers, marketing people or developers – to spend up to 20 percent of their time to do their specific job for other projects within the company. The idea is to foster more cross-collaboration between teams, which can help them understand each other and improve projects across the board. +谷歌开源办公室最近实施了一个有趣的举措,鼓励所有在主要工作中负责开源的员工——无论他们是图形设计师、技术文档人员、营销人员还是开发人员——将最多20%的时间用于公司内其他项目的具体工作。这个想法是促进团队之间的更多跨部门合作,从而帮助他们更好地理解彼此,并改进整体项目。 -## Establishing an open source office +## 建立开源办公室 -For every company, this is where the individualized decisions begin. The process can start from the top down, with buy-in from top management; or from the bottom up, where pockets of developers and open source enthusiasts have been using open source and want to see it formalized. It can manifest itself as a desire to create guidance around legal issues and security, or it can start as a grassroots effort that matures and attracts the attention of corporate leaders. It can even start with a forward-thinking CEO or CTO who champions the cause to drive the company forward and add value by deepening its commitment to open source. That kind of consensus and executive support will be essential to gain traction and move the project forward. +对于每家公司而言,这就是个性化决策开始的地方。这个过程可以从高层管理开始,获得高层的支持;也可以从底层开始,由一些使用开源的开发人员和开源爱好者推动,希望将其正式化。它可以表现为对法律问题和安全性的指导需求,或者作为一个从草根努力发展起来的项目,吸引公司高层的关注。它甚至可以从一个具有前瞻性的CEO或CTO开始,他们倡导和推动公司前进,通过加深对开源的承诺来增加价值。这种共识和高层支持对于获得关注并推动项目向前发展至关重要。 -So where do you start your open source program office journey? Here are some critical steps to follow: +那么,你如何开始开源办公室的旅程呢?以下是一些关键步骤: -### 1. Find a leader +### 1.寻找一位领导者 -Regardless of how your planning starts, it’s important to find the right leader to help develop and then run the fledgling program office inside a company. The top candidate will have a detailed understanding about how open source works, along with some technical chops from working as a developer, contributor, or committer on existing open source projects. They should have a broad understanding of your company’s business along with the business acumen and management skills to help inform strategy and plan across business units. And they need to be sociable so they can convey enthusiasm, knowledge, and information to others and help them understand how the open source initiative is going to transform, change, and improve things for the company. The head of the program office needs to be able to talk with people about the deep technology, but they don’t have to know the ins and outs of every technology at play because there are just too many to master. +无论你的计划如何开始,找到合适的领导者来帮助开发和管理公司内的新兴开源办公室,是至关重要的。理想的候选人应该对开源的运作有详细的理解,同时具有作为开发者、贡献者或提交者参与现有开源项目的技术背景。他们还应对公司的业务有广泛的了解,并具备商业洞察力和管理技能,以帮助制定策略和规划跨业务部门的工作。同时,他们需要具备良好的社交能力,以便向他人传达热情、知识和信息,帮助他们理解开源的创新,是如何变革、改变和改善公司的运营。项目办公室负责人需要能够与人讨论深层技术,但不必掌握每项技术的细节,因为技术种类繁多,难以全部精通。 -In the spirit of open source collaboration, a plethora of online resources exists to help find the best candidates including [detailed sample job description postings](https://github.com/todogroup/job-descriptions) for [open source program managers](http://todogroup.org/blog/sample-job-req/) and other leaders from a variety of companies that established such roles, including Capital One, Box, VMware, Microsoft, Twitter and Yahoo. +在开源合作的精神下,有大量在线资源可以帮助寻找最佳候选人,包括为各种公司(如 Capital One、Box、VMware、Microsoft、Twitter 和 Yahoo)设立此类角色的[详细示例职位](https://github.com/todogroup/job-descriptions)描述以及[开源项目经理的职位](http://todogroup.org/blog/sample-job-req/)描述. -### 2. Define your operations +### 2. 定义你的运营 -The budget, staffing, and technology tools and systems needed by a new program office are also key issues to resolve in establishing its operations. Some companies begin with a part-time manager, but learn they will only get so far with that approach. Making the position someone’s full-time job is a solid step to get the program off the ground, along with a small support staff to keep it nimble. +在建立开源办公室的运营机制时,预算、人员配置和所需的技术工具和系统也是关键问题。有些公司可能会从兼职经理开始,但很快会发现这种方法的局限性。将这一职位设为全职是启动项目的坚实步骤,同时配备一个小型支持团队,以保持灵活性。 -If a program office is too large, there’s a danger it can become too centralized. You want to keep developers and open source communities within the company in the process as much as possible. Outsized offices allow others to defer issues to the program office rather than resolving them on their own. +如果开源办公室规模过大,就可能变得过于集中化。你希望尽可能让公司内部的开发人员和开源社区参与到过程中。规模过大的办公室可能会导致其他人将问题推给开源办公室,而不是自己解决这些问题。 -An example of a well-defined open source program office is one that drives needed policy, processes and tools, while also operating with a mantra of eliminating friction where it is found, using tools to automate what can be streamlined, and delegating tasks which need to be accomplished. We’ll cover more specifics on how to set policies and processes in the sections below. +一个定义良好的开源办公室的例子是,它推动所需的政策、流程和工具,同时秉持一贯的原则,去消除发现的摩擦,自动化工具去去可简化任务,并分发需要完成的任务。我们将在以下部分详细介绍如何制定政策和流程。 -A program office must offer structured policies and processes but also remain flexible. When open source users and contributors need help, the office operates more like a consultancy, providing guidance while still allowing employees to make individual or group business decisions relating to their work. Ultimately, the goal is to establish the right balance of duties and responsibilities to meet the needs of your company and its open source users. +一个开源办公室必须提供结构化的政策和流程,但也要保持灵活性。当开源用户和贡献者需要帮助时,办公室的运作更像是一种咨询服务,提供指导的同时仍然允许员工做出与他们工作相关的个人或团队业务决策。最终的目标是建立适当的职责和责任平衡,以满足公司及其开源用户的需求。 -### 3. Seek feedback and buy-in +### 3. 寻求反馈和获得支持 -Establishing an open source program office isn’t something that should be done in a vacuum. Because it will have a central role in your business, creating it successfully will require open and honest input and feedback from all involved parties inside enterprises. Making sure that everyone from the executives to the developers have a say in its creation will help give the effort broad-based support. +建立开源办公室不是一件可以孤立完成的工作。由于它将在你的业务中发挥核心作用,成功创建它需要来自公司内部所有相关方面的开放和诚实的意见和反馈。确保从高管到开发人员的每个人都能参与到其创建过程中,将有助于为这一工作赢得广泛的支持。 -> “If your goal is to really get a handle on what your company is doing with open source, in both directions – releasing and bringing it in – it really requires thinking about what are the core things that you really, really care about. Keep your process as streamlined as possible to focus on those things and then on top of that, automate as much as you possibly can.” – [Will Norris](https://twitter.com/willnorris), open source office manager at Google. +> “如果你的目标是全面处理公司在开源方面的活动,包括发布和引入开源,你真的需要考虑哪些是你真正关心的核心事项。保持流程尽可能简化,以便专注于这些核心事项,然后在此基础上尽可能多地自动化。” —— [Will Norris](https://twitter.com/willnorris),谷歌开源办公室经理。 -## Program Structure +## 组织架构 -So how and where should open source program offices fit inside a company’s organizational structure? Should it be inside the engineering department? Or in the legal department, the CTO’s office or in another specific business unit? Again, that depends on your company’s primary business and your open source strategy. +那么,开源办公室应该如何以建立,及在公司组织架构中的哪个位置设立呢?它应该设立在工程部门内吗?还是在法律部门、CTO 办公室或其他具体业务部门内?同理,这取决于你公司的主要业务和开源战略。 -### Legal +### 法律部门 -For companies that have large intellectual property portfolios, that could mean the open source program office might be a perfect fit in the legal office, where developers can work closely with the legal team on issues that arise. That might be a good fit for a hardware company because it’s always concerned about potentially running into IP-related legal issues. +对于拥有大量知识产权的公司来说,开源办公室可能非常适合设在法律部门,这样开发人员可以与法律团队密切合作解决出现的问题。这可能对硬件公司特别合适,因为这类公司始终关注可能遇到的与知识产权相关的法律问题。 -### Engineering +### 工程部门 -Other companies are more engineering-driven, so they choose to maintain their open source program offices within their engineering departments. That allows them to focus their efforts directly on making their developers more effective and productive in their work. +对于那些以工程为主导的公司来说,他们通常选择将开源办公室设在工程部门内部。这使他们能够直接将精力集中在提高开发人员的工作效率和生产力上。 -### Developer Relations, Marketing, or Communications +### 开发者关系、市场营销或传播部门 -In other cases, some open source offices are located inside the marketing wing of organizations because they use open source to funnel leads aimed at selling the products they build using open source. +在其他情况下,一些开源办公室设在组织的市场营销部门,因为他们利用开源来引导潜在客户,从而销售他们开源构建的产品。 -At Twitter, where open source use has been integral to the company’s success, developers were finding it difficult to contribute back to open source projects starting in 2010 because the company’s legal department had serious concerns about code licensing and related issues. Developers and software engineers responded by seeking ways to automate the license compliance processes – to “grease the wheels” – to alleviate the concerns of the legal and engineering departments. The result was the hiring of an open source program manager and the creation of an open source program office to fix processes, streamline procedures, bring in tools to automate tasks and make other needed changes. +在Twitter,虽然开源的使用对公司的成功至关重要,但自2010年起,开发人员发现很难向开源项目贡献代码,因为公司的法律部门对代码许可和相关问题有严重担忧。开发人员和软件工程师通过寻求自动化许可合规流程的方法——以“润滑轮子”的方式——来缓解法律和工程部门的顾虑。最终的结果是聘请了一位开源项目经理,并成立了开源办公室,以解决流程问题、简化程序、引入工具来自动化任务,并进行其他必要的更改。 -Intriguingly, Netflix took a different approach and chose not to create or use a centralized open source program office, says Andrew Spyker, the manager of the company’s container cloud. Instead, the streaming movie and entertainment company organizes its open source use through a [small, cross-functional working group](https://www.youtube.com/watch?v=oq__rmr0Qe8&t=547s) that runs an internal mailing list for discussions and meets informally once a month to help each other resolve open source issues. The volunteer working group members assist other decentralized teams, leaving everyone with less need to focus on administrative tasks such as legal issues, tools, monitoring and community promotion. For Netflix this is a workable approach because it’s an entertainment company and not a software company. +有趣的是,Netflix容器云部门的经理Andrew Spyker说他们采取了不同的方法,选择不创建或使用集中式的开源办公室。这家流媒体电影和娱乐公司通过一个 [小型跨职能工作组](https://www.youtube.com/watch?v=oq__rmr0Qe8&t=547s) 来组织其开源使用,该工作组运营一个内部邮件列表用于讨论,并每月非正式地开会一次,以帮助彼此解决开源问题。志愿者工作组成员协助其他分散的团队,减少了大家在法律问题、工具、监控和社区推广等行政任务上的关注。对于Netflix来说,这种方法是可行的,因为它是一家娱乐公司,而不是一家软件公司。 -At Microsoft, the structure of its open source program office, which is inside its engineering department, is unique because it has some 60,000 software engineers to support. That large number of developers required a move away from the idea that the details of all open source projects would have to go through one centralized office, which would have been overwhelmed and unworkable. Instead, for things that can’t be automated, the company’s open source program office team enables engineers to make local decisions about their projects, rather than having to attempt to navigate a centralized bottleneck that could gum up the operations. +在微软,开源办公室的结构独特,因为它位于工程部门内部,并且需要支持大约 60,000 名软件工程师。如此庞大的开发人员数量要求公司放弃将所有开源项目的细节集中处理的想法,这种集中方式会导致办公室不堪重负且难以运作。相反,对于那些无法自动化的事务,公司开源办公室团队使工程师能够对他们的项目做出本地决策,而无需尝试绕过可能造成操作瓶颈的集中办公室。 -Under its process, Microsoft engineers can go into the company’s open source workflows, share that they want to use a piece of code or release something to an open source community, and then receive responses from local reviewers who provide feedback. About 300 different groups of business and legal reviewers are available to weigh in on the localized requests with their expertise, helping to provide a workable approach for the company through a highly specialized process. +在微软的流程中,工程师可以进入公司的开源工作流,分享他们希望使用一段代码或向开源社区发布某些内容的信息,然后从本地审阅者那里获得反馈。大约300个不同的业务和法律审阅小组可以对这些本地请求提供专业意见,通过高度专业化的过程为公司提供可行的方法。 -> “If we tried to have a centralized body to approve open source for Windows, Office, and Azure, we would be pulling our hair out. Those are fundamentally different businesses. We give **engineers** the tools and guidance to enable their work, but are not a **central approval body**. That works in some companies but would not work here.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the [Open Source Programs Office at Microsoft](https://opensource.microsoft.com/resources/office) +> “如果我们试图设立一个集中机构来批准 Windows、Office 和 Azure 的开源,那我们会抓狂。这些是根本不同的业务。我们为 **工程师** 提供工具和指导以支持他们的工作,但我们不是一个 **集中审批机构**。这种集中审批在一些公司有效,但在我们这里行不通。” —— [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源办公室主任。 -## Management roles +## 管理角色 -In creating an open source program office, decisions also must be made to establish the roles and responsibilities of the open source program manager, the company’s legal team, and any review board made up of engineers and executives. +在创建开源办公室时,还必须决定开源项目经理、公司的法律团队以及由工程师和高管组成的任何审查委员会的角色和职责。 -### Program Manager +### 项目经理 -For maximum effectiveness, the program manager should be empowered as an executive-level position with direct oversight and hands-on management of the company’s interests in its open source activities. That would give them the tools they need to lead the way inside an enterprise toward its open source goals and vision. +为了实现最大效果,项目经理应该被赋予执行级别的职位,直接监督和亲自管理公司在开源活动中的利益。这将使他们拥有引导公司朝着开源目标和愿景前进所需的工具。 -Microsoft uses an Open Source Executive Council, which is similar to a review board. The group, which is made up of vice presidents from all the major business units inside the company, provides board of directors-style guidance on policy changes and introductions, sets priorities for the open source program, and assists in driving changes in behavior. +微软使用一个开源执行委员会,它类似于一个审查委员会。该小组由公司内部所有主要业务部门的副总裁组成,提供董事会风格的政策变更和引入指导,设定开源项目的优先级,并协助推动行为变革。 -### Legal +### 法律 -Like every other function inside a company, legal teams must have a say in the operations of the open source program office to ensure compliance with laws, open source licensing agreements, and other legal details. Specific to open source, the legal team needs to be responsible for ensuring that a company can consume code internally and contribute back to projects with acceptable terms. Larger organizations should consider hiring or training a dedicated attorney to advise their open source program. But you could also use a part-time, knowledgeable staff member or outside counsel. It is often helpful to work with an attorney who is knowledgeable and experienced with open source licensing and IP as it can be a specialized, and at times baffling, legal domain relative to commercial contracts or standards. +像公司内部的其他职能部门一样,法律团队必须在开源办公室的运营中有发言权,以确保遵守法律、开源许可协议和其他法律细节。对于开源项目,法律团队需要负责确保公司可以在内部使用代码,并在可接受的条款下向项目做出贡献。大型组织应考虑聘请或培训一名专职律师来为他们的开源项目提供建议。你也可以使用兼职的、有相关知识的员工或外部律师。与了解和有开源许可及知识产权经验的律师合作通常会有帮助,因为这相对于商业合同或标准来说是一个专门且有时令人困惑的法律领域。 -### Compliance Team +### 合规团队 -The open source compliance team is a cross-disciplinary group consisting of various individuals tasked with the mission of ensuring open source compliance. The core team, often called the Open Source Review Board (OSRB), consists of representatives from engineering and product teams, one or more legal counsel, and the compliance officer (who is often the open source program manager). +开源合规团队是一个跨学科的小组,由负责确保开源合规的各类人员组成。核心团队,通常称为开源审查委员会(OSRB),由来自工程和产品团队的代表、一名或多名法律顾问以及合规官(通常是开源项目经理)组成。 -The extended team consists of various individuals across multiple departments that contribute on an ongoing basis to the compliance efforts. These may include documentation, supply chain, corporate development, IT, localization and an Open Source Executive Committee (OSEC). However, unlike the core team, members of the extended team are only working on compliance on a part-time basis, based on tasks they receive from the OSRB. Samsung program manager Ibrahim Haddad’s book, [Open Source Compliance in the Enterprise](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/), provides a detailed discussion on the roles and responsibilities of individuals involved in achieving open source compliance. +扩展团队由多个部门的各种人员组成,他们持续为合规工作做出贡献。这些成员可能包括文档部门、供应链、企业发展、IT、本地化以及开源执行委员会(OSEC)。然而,与核心团队不同,扩展团队的成员仅根据从 OSRB 接收到的任务兼职处理合规问题。三星项目经理易卜拉欣·哈达德(Ibrahim Haddad)在他的书籍 [《企业中的开源合规》](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/) 中详细讨论了在实现开源合规过程中各个参与者的角色和职责。 -### Developer Relations, Advocacy, and Evangelists +### 开发者关系、倡导和传播者 -Open source developer relations and evangelists can be important to a fledgling open source program office because they can work to build interest and enthusiasm within a company’s developer community for specific projects, which can help grow the efforts and increase teamwork among engineers. Evangelists often go to conferences and tech events and explain what open source is to help audiences understand how it can be used and what challenges and opportunities it offers, while sharing their corporate experiences with the open source community. +开源开发者关系和传播者对于一个新兴的开源办公室非常重要,因为他们可以在公司的开发者社区内为特定项目激发兴趣和热情,这有助于推动工作并增加工程师之间的团队合作。传播者通常会参加会议和技术活动,解释什么是开源,帮助观众了解开源如何使用以及它带来的挑战和机遇,同时分享他们在开源社区中的公司经验。 ### Others +### 其他 + +此外,创建其他职位对于开源办公室的成功也很重要,包括工具管理员、培训经理、工具和系统的集成开发人员、部署支持人员、实施项目负责人和开源传播者。例如,工具管理员需要帮助选择、提供和集成工程师在开源项目中所需的工具,同时确保这些工具符合企业的许可和其他要求。 + +## 设定政策和流程 -In addition, the creation of other job roles is important for the success of the open source program office, including tool administrators, training managers, integration developers for tools and systems, deployment support staffers, implementation project leads, and open source evangelists. Tool administrators, for example, are needed to help select, provide and integrate needed tools for engineers working on their open source projects, while also ensuring the tools meet the licensing and other requirements of an enterprise. +在公司开源办公室的重要组成部分已经规划或组建完毕后,从创建到结构再到人员,下一步就是制定明确的政策和流程,以便一致地实施公司的开源战略。 -## Setting policy and processes +这些政策应明确公司在开源工作中的要求和规则,以及记录和可执行的流程,以确保日常操作中遵循这些规则。 -With many of the other important components now planned or assembled for your company’s open source program office, from its creation to its structure to personnel, the next step is to develop well-defined policies and processes which will enable consistent implementation of your company’s open source strategy. +关键是,这些政策应要求最少的额外开销。微软在审视其开源办公室的政策和流程时,目标是使其对开发人员和其他团队成员尽可能不显眼。该方法是在审查现有开源政策和流程时,反复地消除、自动化和授权任务,以便不断质疑和更新规则,从而简化程序。这意味着要询问政策存在的理由以及如何改进以便更好地服务用户。 -The policies should lay out the requirements and rules for working with open source across the company, as well as documented and executable processes which will ensure the rules are followed on a day-to-day basis. +> “制定一个明确的政策是很好的,但必须是一个明确的、最小化的政策。否则,律师、安全人员、业务人员等各方都会纷纷提出他们的顾虑和限制。最终,你会得到一套束缚性的政策,基本上意味着没有人能做任何事情。” —— [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源办公室主任。 -Crucially, they should require minimal overhead. Microsoft looks at its open source program office policies and processes with the goal of making them as unobtrusive as possible for developers and other team members. The approach is to repeatedly eliminate, automate and delegate when reviewing existing open source policies and processes so the rules are constantly questioned and updated to streamline procedures. That means asking why policies are even in place and how they can be improved for users. +即使这些规则为开源办公室精心制定,公司也必须准备好,随着时间的推移,根据业务变化和开源参与的成熟与增长,来调整和修改这些规则和流程。 -> “Having a well-defined policy in place, that’s great, but it’s got to be a well-defined minimal policy. Otherwise you get lawyers, security folks, business folks, all piling in their concerns and constraints. Soon you end up with a strait jacket full of policy that basically means that nobody can do anything.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the [Open Source Programs Office at Microsoft](https://opensource.microsoft.com/resources/office) +这可能听起来像是过程中的另一个令人畏惧的步骤,但就像开源代码本身一样,样本规则和流程在开源领域中是可以获取的,企业可以实施和定制这些样本,从而简化任务。 -Even as those rules are carefully created for open source program offices, companies must be prepared to evolve and modify the rules and procedures as needed over time as their businesses change and as their open source engagements mature and grow. +最好的示例之一来自谷歌,该公司在2017年初发布了其 [开源政策](https://opensource.google.com/docs/),供公众审阅和自由使用,以便其他人了解公司如何使用、发布和支持开源,以及如何参与项目和社区。虽然出于安全和隐私原因,部分内容被隐藏,但它提供了许多关于公司如何进行工作的宝贵经验。 -This may sound like yet another daunting step in the process, but like open source code itself, sample rules and processes are available from open source silos and can be implemented and customized by enterprises, making your tasks easier. +在起草开源政策时,需要讨论的许多主题包括: -Among the best examples of such rules are from Google, which early in 2017 published its [open source policies](https://opensource.google.com/docs/) for review and free use so others can learn how the company uses, releases and supports open source and how it’s involved in projects and communities. Some of the content is scrubbed for security and privacy reasons, but it provides many lessons learned in how the company does its work. +* 公司员工如何为开源项目做贡献 +* 公司如何开源内部项目 +* 公司如何接受外部对其开源项目的贡献 +* 如何准备开源发布 +* 如何获得批准 +* 开发者如何使用在GitHub和其他代码库中找到的开源代码 +* 引进开源代码入公司的程序和规则 +* 如何记录引入的代码,以便其他人知道它正在被使用 +* 公司如何围绕自身建立一个志同道合的外部开发者社区,以保持其活力 +* 确定代码何时应开源或保留为知识产权的规则。 -When drafting open source policies, among the many topics that need to be discussed are: +### 发布代码的政策 -* How employees of your company can contribute to open source projects -* How your company can open source internal projects -* How your company accepts external contributions to their open source projects -* How to prepare for open source releases -* How approvals are received -* How developers can use open source code they find on GitHub and other code repositories -* Procedures and rules explaining how open source code can be brought into your company -* How the incoming code is catalogued so others know it is being used -* How a company can grow a community of like-minded external developers around it to keep it thriving -* Rules that help determine when code should be released as open source or kept as intellectual property +你希望帮助人们在为开源项目做出贡献和发布自己项目方面取得成功。指南和检查表能确保开发者在将代码发布为开源时,避免遇到许可或保密问题。特别是对于新贡献者,提供一个内部审核过程作为安全的反馈渠道,也有助于在做出贡献之前获得反馈。(请参阅我们的[参与开源社区指南](https://todogroup.org/guides/participating/))。 -### Policies for releasing code +你的组织还应努力采用“优先向上游提交代码”的开发政策。通过首先向上游开源项目提交补丁,并将其整合到自己的产品中,将避免在每次发布后花费大量时间和金钱进行重构工程。 -You want to help people be successful in making contributions to open source projects and in releasing their own projects. Guidelines and checklists ensure that developers have everything they need to release their code as open source without running into licensing or confidentiality issues. Especially for new contributors, it can also help to have an internal review process available as a safe place to get feedback before making a contribution. (See our guide on [Participating in Open Source Communities](https://todogroup.org/guides/participating/).) +### 接受贡献的政策 -Your organization should also strive to adopt an “upstream first” development policy. By submitting patches to the upstream open source project first, and incorporating them into your own products downstream, you will avoid spending a massive amount of time and money on re-engineering after each release. +除非你的开源项目托管在一个中立的基金会,否则制定规则以规范公司如何接受来自外部开发者的贡献是特别重要的。 -### Policies for accepting contributions +> “你实际上不希望只有你们公司的人在为你的开源项目做贡献。你希望公司外的人也能为你的开源项目做贡献,因为最终,雇用全球所有最聪明的人是不可能的。即使你是谷歌,这也仍然不现实。” – [Chris Aniszczyk](https://twitter.com/cra?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor),Cloud Native Computing Foundation 首席运营官。 -Unless your open source projects are housed at a neutral foundation, rules that set out procedures for your company to receive contributions to your own open source projects from external developers are particularly important. +当然,这也是将公司开源代码发布到其他社区并邀请其他开发者对自己的项目产生兴趣的好处之一。因为从大的角度来看,即使这些开发者并不是你们公司的正式员工,你们也可以有来自全球的优秀人才在你们的代码上工作,提升其质量和扩展功能。这种合作对公司来说非常重要,也是许多开源办公室的共同关注点。 -> “You actually don’t want to be the only people contributing to your open source project. You want to have people outside your company contribute to your open source project, because at the end of the day, there’s no way to hire all the smartest people in the world. It’s impossible. Even if you’re Google, it’s still impossible.” – [Chris Aniszczyk](https://twitter.com/cra?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor), COO of the Cloud Native Computing Foundation. +### 促进采用的政策 -That is, of course, one of the benefits of putting your company’s open source code out into other communities and inviting other developers to establish an interest in your own projects. Because in the grand scheme of things, even though they are not officially your employees, you can have brilliant people working on your company’s code from around the world, making it better and expanding its capabilities. This kind of collaboration is important for companies and is a common focus for many open source program offices. +你还需要鼓励其他人将你的代码用于他们的产品和服务。这对建立生态系统至关重要,这些生态系统反过来又有助于发展和维持你的开源项目。开源使用的政策可以采取各种创新形式。 -### Policies to promote adoption +Red Hat有一个独特的政策,即在大多数情况下,默认将新创建的代码从一开始就设为开源。这意味着在公司内部开发的每一段软件,都假设它将来可能会被发布为开源。这一点很有趣,因为通常工程师在将他们的代码发布为开源时会有不同的态度,这是因为其他人会查看这些代码。由于这种审查,他们往往在编写开源代码时会以更好的方式组织代码,编写出更干净的代码,并减少或改善代码依赖。 -You also want to encourage others to use your code in their products and services. This is key to building ecosystems that in turn help grow and sustain your open source projects. Policies for open source use can come in a variety of innovative forms. +### 内部使用的政策 -Red Hat has a unique policy by defaulting to open source with its newly-created code in most cases from the start. That means that when developing each piece of software inside the company, it is assumed that in the future it may be destined to be released as open source. This is intriguing because typically there is a different attitude among engineers for releasing their code as open source because other people will then be looking at it. Due to that scrutiny, they tend to structure things in better ways when writing open source, creating cleaner code with fewer or improved code dependencies in their work. +其他需要的政策包括关于团队如何寻找可信的开源软件来源和创建的规则,建立代码管理和维护程序的政策,以及规范项目的社区互动。(参见我们关于[使用和分发开源代码](https://todogroup.org/guides/using/)的指南。) -### Policies for internal consumption +开源软件使用策略确保了任何软件(无论是专有的、第三方的还是开源的)在进入产品基础之前都经过审计、审查和批准。这还确保了公司有计划完成使用各种软件组件所产生的许可证义务,确保产品在交付给客户之前已经符合所有要求。 -Other needed policies include rules about how and where your team finds trusted sources for open source software use and creation, policies about establishing code management and maintenance procedures, and formalizing community interaction for your projects. (See our guide on Using and Distributing Open Source Code.) +例如,你的政策可以要求工程师在将任何开源代码集成到产品中之前,先获得公司审计人员的批准,例如开源审查委员会(OSRB)。政策还可以规定,从第三方收到的软件必须经过审计,以识别其中包含的开源代码,从而确保在产品发布之前能够履行许可证义务。 -An open source usage policy ensures that any software (proprietary, third-party, or open source) that makes its way into the product base has been audited, reviewed, and approved. It also ensures that your company has a plan to fulfill the license obligations resulting from using the various software components, before your products make it to customers. +### 合规政策 -For example, your policy could require engineers to receive approval from your organization’s auditing staff, such as an open source review board (OSRB), before integrating any open source code in a product. It may also state that software received from third parties must be audited to identify any open source code included, which ensures license obligations can be fulfilled before a product ships. +还需要制定政策,以规范和建立法律合规程序,并确保高层管理对该计划的监督。(详见我们的电子书,[《企业中的开源合规》](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/)。) -### Policies for compliance +你需要规划如何处理那些支持你的合规性和代码测试策略的软件工具。你将需要自动化和简化开发人员和贡献者的程序,同时还需要内部供应链团队(如果有的话)的帮助,以确保第三方引入的代码也符合合规要求。 -Also needed are policies to formalize and establish legal compliance procedures and to assure executive oversight for the program. (See our ebook, [Open Source Compliance in the Enterprise](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/), for a detailed compliance program.) +目前市场上有广泛的开源工具(如 [FOSSology](https://www.fossology.org/)、[SPDX](https://spdx.org)、[OpenChain](https://www.openchainproject.org/)、[ORT](https://github.com/oss-review-toolkit/ort)、[Clearly Defined](https://docs.clearlydefined.io/)),以及收费的专有工具,这些工具可以帮助完成这些重要任务。对于大多数开源办公室而言,可以利用高质量且功能齐全的工具集合,无需自建定制化的工具。这主要得益于开源协作,贡献者创建和完善了可以处理企业任务的工具。如果这些工具不能完全满足你的项目需求,用户可以参与贡献,修改和改进它们以获取所需的功能。参与开源社区中的企业工具开发,是你未来开源办公室可能希望支持的一个方面。 -You’ll want to map out how you’ll handle the software tools that will enable your compliance and code testing strategy. You'll want to and automate and streamline procedures for developers and contributors, along with help from internal supply chain teams (should you have them) to ensure that code brought in by third parties is also compliant. +现有的开源资源也是寻找开源项目所需其他材料的潜在宝藏,包括贡献者许可协议(CLA)的文档。CLA“定义了在公司/项目中贡献知识产权的条款,通常是开源许可下的软件。” [贡献者许可协议](https://en.wikipedia.org/wiki/Contributor_License_Agreement) 使用CLA的项目要求贡献者及其公司在接受贡献之前签署CLA。 -There’s a broad array of open source tools (e.g. [FOSSology](https://www.fossology.org/), [SPDX](https://spdx.org), [OpenChain](https://www.openchainproject.org/), [ORT](https://github.com/oss-review-toolkit/ort), [Clearly Defined](https://docs.clearlydefined.io/)) as well as fee-based proprietary tools in the marketplace today that can help with these important tasks. For most open source program offices, a high-quality and comprehensive collection of tools can be brought together without the need to build your own custom tools. Again, much of this is due to open source collaboration, where contributing developers have created and refined the tools which can handle these tasks for enterprises. If the tools don’t do exactly map to what your project needs, then users can contribute back to modify and improve them to gain the capabilities they seek. Getting involved in the open source community around enterprise tooling is something that your future open source program office will likely want to support. +许多公司已经编写了自己的CLA,但也有通用版本的开源协议可以使用,无需从头开始编写。大多数所需内容可以从模板中找到,然后根据具体情况自定义CLA,以涵盖所有剩余问题。其他潜在贡献公司的律师通常会欣赏使用标准条款的做法。 -Existing open source resources are also potential gold mines for finding other materials needed by your open source projects, including documentation for contributor license agreements (CLAs). CLAs “define the terms under which intellectual property has been contributed to a company/project, typically software under an open source license.” [Contributor License Agreement](https://en.wikipedia.org/wiki/Contributor_License_Agreement) Projects that use CLAs require contributors, and often their companies, to sign the CLA before contributions will be accepted by the project. +谷歌定期使用各种工具来执行自动化代码检查,这些工具包括自定义过滤器,可以扫描代码库以检查许可证、许可证兼容性和其他因素。每次谷歌发布新版安卓或其他应用程序时,都要经过一个自动化的许可证合规检查过程,从而简化公司的程序。自动化加快了向工程师解释该过程简单和无缝,并且不会对他们的应用程序使用造成负担。 -Many companies have written their own CLAs, but generic versions are available as open source agreements which one can use without starting from scratch. Most of what you will need can be found in a template and then you can customize the CLAs to cover any issues that remain. Attorneys from other potential contributing companies will often appreciate reuse of standard terms. -Google regularly uses a variety of tools to perform automated code checks using features such as custom filters, which can scan code bases to check for licenses, license compatibility, and other factors. Each time Google releases a new version of Android or other application, it undergoes an automated process for checking license compliance, simplifying procedures for the company. Automation quickens making the argument to engineers that the process is simple and seamless and won’t burden them to use for their applications. +所有新入职的谷歌工程师还必须参加一个小时的开源课程,课程中强调了许可证和合规性如何成为公司业务的一部分。公司分享的一个关键收获是,谷歌不仅因法律要求而必须遵守许可证,而且因为这样做对社区是正确的。谷歌的律师会在许可证或代码使用上出现明显错误时代表公司,但公司对可能提交的代码对社区声誉造成伤害非常敏感。 -All new Google engineers are also required to go through a one-hour open source class where licensing and compliance are stressed as part of how the company does business. A key lesson shared by the company is that not only is Google obligated by licensing legalese to comply with licenses, but that it also complies because it’s the right thing to do for the community. Google’s lawyers are available to represent the company if an obvious mistake is made in licensing or code use, but the company is very sensitive about potentially submitting code that could harm its standing in the community. -> “Angering our friends in the open source community would be devastating. It’s not something we would ever want to do because we care about this community, we’re part of it. For companies that are new to open source, I think they often fail to recognize the importance of that.” – [Will Norris](https://twitter.com/willnorris?lang=en), open source office manager at Google +> “激怒我们的开源社区朋友将是毁灭性的。这是我们绝对不愿意做的事情,因为我们关心这个社区,我们是其中的一员。对于那些刚接触开源的公司,我认为他们往往没有意识到这一点的重要性。” – [Will Norris](https://twitter.com/willnorris?lang=en),谷歌开源办公室经理。 -## Final words +## 结束语 -There’s a lot of work to do and much to consider when your company decides to create an open source program office, but its value will likely outweigh the efforts taken to accomplish it. Finding just the right leader to drive the program office initiative is a critical step in the process to make it a success. +当公司决定创建一个开源办公室时,有很多工作要做,也有许多因素需要考虑,但其价值很可能会超过为此付出的努力。在整个过程中,找到合适的领导者来推动项目办公室的工作是取得成功的关键步骤。 -> “This is a culture change endeavor. The code is obviously a big part of it, but the community and the engagement is a people-to-people thing. If you’re going to start an open source program office and you’re going to try to make it a real thing, you’re going to need to understand the culture and get somebody in place who can help drive that culture to a new level. Your head of open source is really a change agent.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the [Open Source Programs Office at Microsoft](https://opensource.microsoft.com/resources/office) +> “这是一次文化变革的努力。代码显然是其中的重要部分,但社区和参与是人与人之间的事情。如果你打算创建一个开源办公室,并努力使其成为现实,你需要理解这种文化,并找到能够帮助推动这种文化达到新水平的人。你的开源负责人实际上是一个变革推动者。” – [Jeff McAffer](https://twitter.com/jeffmcaffer),微软[开源办公室主任](https://opensource.microsoft.com/resources/office)。 -## Example open source program job listing +## 开源项目职位列表样例 -If you’re interested in building out and open source program office and want to hire for the role, we advise taking a look at a template from the TODO Group along with real example job descriptions: +如果你有兴趣建立一个开源办公室并希望招聘相关职位,我们建议查看 TODO Group 提供的模板以及实际的职位描述示例: https://github.com/todogroup/job-descriptions -## Acknowledgements +## 致谢 -Contributors to this guide: +贡献者名单: -* [Chris Aniszczyk](https://twitter.com/cra), COO of CNCF (former head of open source at Twitter) -* [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the [Open Source Programs Office at Microsoft](https://opensource.microsoft.com/resources/office) -* [Will Norris](https://twitter.com/willnorris?lang=en), open source office manager at Google -* [Andrew Spyker](https://twitter.com/aspyker), container cloud manager at Netflix -* [Remy DeCausemaker](https://twitter.com/Remy_D), Head of Open Source, [Spotify](https://twitter.com/SpotifyEng) +* [Chris Aniszczyk](https://twitter.com/cra), CNCF 首席运营官(前推特开源负责人) +* [Jeff McAffer](https://twitter.com/jeffmcaffer), [微软开源办公室](https://opensource.microsoft.com/resources/office)总监 +* [Will Norris](https://twitter.com/willnorris?lang=en), 谷歌开源办公室经理 +* [Andrew Spyker](https://twitter.com/aspyker), Netflix 容器云经理 +* [Remy DeCausemaker](https://twitter.com/Remy_D), 开源负责人, [Spotify](https://twitter.com/SpotifyEng) diff --git a/content/zh-CN/guides/diversity-inclusion.md b/content/zh-CN/guides/diversity-inclusion.md index 659ac0f2..834147e1 100644 --- a/content/zh-CN/guides/diversity-inclusion.md +++ b/content/zh-CN/guides/diversity-inclusion.md @@ -1,173 +1,173 @@ --- -title: Building an Inclusive Open Source Community +title: 打造一个包容性的开源社区 --- -Diversity and inclusion are vital to the future of open source communities . Projects grow and thrive -- and perform better technically and economically – when contributors with diverse perspectives, experiences, and skill sets participate. Open source communities seek to be open; this means they want everyone in the community who wants to contribute to feel welcome to do so regardless of gender, gender identity, sexual orientation, disability, race, ethnicity, age, religion, class origin, regional origin, educational background, political affiliation, or economic status. Open source communities can apply best practices to their communities that promote inclusiveness and diversity. To address these critical issues takes the strength of the collective community. Together, we can increase awareness, and subsequently address the representation gap—to benefit us all. +多元化和包容性对开源社区的未来至关重要。当具有不同视角、经验和技能集的贡献者参与进来时,项目才会发展壮大,同时在技术和经济方面表现得更出色。开源社区力求开放;这意味着他们想要社区中任何想要做出贡献的人都受到欢迎,无论其性别、性别认同、性取向、残疾、种族、民族、年龄、宗教、阶级出身、地域出身、教育背景、政治派别或者经济地位。开源社区可以在其社区中采用最佳实践来促进包容性和多元化。解决这些关键问题需要整个社区的力量。齐心协力,我们可以提高认识,进而解决代表性不足的问题,让所有人从中受益。 -This guide outlines why and how to build a diverse and inclusive community of individual contributors and project leadership. You’ll learn how to frame a project for inclusiveness; how to set goals and measure progress; how to protect your community from bad actors; and gain tactics for increasing diversity. +该指南概述了为何以及如何构建一个由个人贡献者和项目领导层组成的多元化和包容性的。你将学习如何为项目制定包容性框架;如何设定目标并衡量进展;如何保护您的社区免受不良行为者的侵害;以及获得增加多元化的策略。 -### Diversity and inclusion are important +### 多元化和包容性非常重要 -Diversity and Inclusion (D&I) align with the ethos of open source communities. Open source invites all people to benefit from and participate in the creation of code. But open source projects often don't include many people, particularly women and underrepresented groups. This misaligns with "open-ness" and it makes open source communities less effective. Research shows that teams with diverse members and those that are more inclusive, perform better, innovate more, and produce more profitable outcomes. +多元化和包容性与开源社区的精神相辅相成。开源邀请所有人受益以及参与代码创作。但是开源项目通常不包括多少人,尤其是女性和弱势群体。这与“开放性”不符,并使得开源社区效力降低。研究表明,拥有多元化成员,以及更具有包容性的团队表现得更好,更具创新性,以及产生更具收益的成果。 -A 2017 McKinsey & Company [report](https://www.mckinsey.com/business-functions/organization/our-insights/delivering-through-diversity?cid=soc-web) found that companies in the top quartile for gender diversity on their executive teams were 15% more likely to deliver above-average profitability than those in the bottom quartile, while those with ethnic and cultural diversity were 33% more likely to outperform. The reverse is also true: "The penalty for not being diverse on both measures persists," according to the report. Companies in the bottom quartile on both gender and ethnic diversity “are more likely to underperform their industry peers on profitability.” They underperformed by 29% in 2017, the McKinsey analysts found. +麦肯锡公司在 2017 年发布的一份[报告](https://www.mckinsey.com/business-functions/organization/our-insights/delivering-through-diversity?cid=soc-web)中发现,执行团队中性别多样性最高的前 25% 的公司比后 25% 的公司,在获得平均水平之上的盈利方面高出 15% 的可能性,而种族和文化多元化高的比那些种族和文化多元化低的公司高出 33% 的可能性表现出色。报告还指出,情况相反的情况也成立:“在这两个指标缺乏多元化都会带来负面影响”。 在性别和种族多样性处于后 25% 的公司“更有可能在盈利能力方面逊色于业内同行”。麦肯锡分析师发现,他们在 2017 年的业绩低于行业平均水平 29%。 -Evidence also points to greater levels of diversity leading to higher levels of innovation. "We wanted to know whether companies with policies encouraging the promotion and retention of a diverse workforce – in terms of gender, race and sexual orientation – also perform better at developing innovative products and services. The short answer is that they do," [said Richard Warr, co-author of a research report](https://news.ncsu.edu/2018/01/diversity-boosts-innovation-2018/) and head of the Department of Business Management in NC State’s Poole College of Management. “To be clear, we found that there is a causative link – it’s not just a correlation,” Warr says. “And the finding extends across a broad range of industry sectors.” These findings are consistent with a [2004 University of Michigan Study](http://vserver1.cscs.lsa.umich.edu/~spage/pnas.pdf) that revealed that groups of diverse problem solvers can outperform groups of high-ability problem solvers. +证据也表明更高的多元化水平能带来更高的创新水平。“我们想知道拥有鼓励提升和留住多元化员工(在性别、种族和性取向方面)政策的公司,是否在开发创新产品和服务方面也表现得更好?简而言之,答案是肯定的。”“北卡罗州立大学普尔管理学院工商管理系主任、[研究报告合著者理查德·沃尔说](https://news.ncsu.edu/2018/01/diversity-boosts-innovation-2018/)”。沃尔说,“需要明确的是,我们发现这是一种因果关系,而不仅仅是相关性。”“这一发现还适用于广泛的行业领域。”这些发现与 [2004 年密歇根大学的研究成果](http://vserver1.cscs.lsa.umich.edu/~spage/pnas.pdf)一致,该研究表明,多元化问题解决者组成的团队的表现要优于由高能力问题解决者组成的团队。 -Despite the overwhelming evidence that diversity and inclusion deliver significant advantages, the representation of women and other under represented in the tech industry continues to lag. Research from the National Center for Women and Information Technology shows that women comprised only [26% of the computing workforce in 2018](https://www.ncwit.org/sites/default/files/resources/btn_05092019_web.pdf). According to [a report](https://www.computerscience.org/resources/women-in-computer-science/) by ComputerScience.org, "the percentage of women working in computer science-related professions has steadily declined since the 1990s, dropping from 35% to 25% in the last 15 years." Yet, representation of women in the workforce at large is the exact opposite: women are 47% of today’s workforce, as compared to 38% in the 1970s. The problem is not confined to finding talent to recruit, but in retaining talent as well. +尽管大量证据表明多样性和包容性带来巨大优势,但是女性和其他代表性不足的群体在科技行业的代表性仍然落后。来自美国全国妇女与信息技术中心 (National Center for Women and Information Technology) 的研究表明,女性在 [2018 年的计算机行业劳动力中仅占 26%](https://www.ncwit.org/sites/default/files/resources/btn_05092019_web.pdf)。根据 ComputerScience.org 的[一份报告](https://www.computerscience.org/resources/women-in-computer-science/),自 1990 年代以来,从事计算机相关职业的女性比例在稳步下降,在过去 15 年间从 35% 下降到 25%。”然而,女性在整体劳动力中的比例确恰恰相反:女性占当今劳动力的 47%,而 1970 年代为 38%。问题不仅限于招聘人才,还在于留住人才。 -### The unique challenges faced in open source communities +### 开源社区面临的独特挑战 -Women are underrepresented in the computing workforce (26% according to the 2018 study cited above) but the numbers are even more concerning in open source communities, where women account for approximately 10-11% of contributors (according to [data](https://blog.bitergia.com/2016/04/25/openstack-genderdiversity-technical-contributions-analysis/) from Bitergia). At first glance a diverse and inclusive culture would appear to be a natural fit for open source communities, but that is not the case—obstacles such as bias, stereotyping, bullying, online harassment, and turf protections continue to hold back the true potential of ‘open’. "One thing many respondents said drives them away from open source projects are negative interactions such as rudeness, name-calling, stereotyping, and—at the more extreme end of the spectrum—stalking and outright harassment. Open source has a reputation for being aggressive," Frannie Zlotnick, the GitHub data scientist who led a 2017 research project on gender bias in pull request acceptances, [told](https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/) Wired. +女性在计算机行业劳动力占比较低(根据上述 2018 年的研究,占比为 26%),但在开源社区中,这一数字更令人担忧,女性贡献者仅占大约 10%-11%(根据 Bitergia 的[数据](https://blog.bitergia.com/2016/04/25/openstack-genderdiversity-technical-contributions-analysis/))。乍一看,多元化和包容性的文化似乎与开源社区天然契合,但事实并非如此——偏见、刻板印象、欺凌、网络骚扰和领地保护等障碍仍然阻碍着“开放”的真正潜力。“许多受访者表示,驱使他们远离开源项目的原因之一是消极互动,例如粗鲁、辱骂、刻板印象,以及更极端的情况——跟踪和公然骚扰。开源项目以攻击性强而闻名”,领导了 2017 年关于拉取请求接受度中性别偏见研究项目的 GitHub 数据科学家弗兰妮·兹洛特尼克(Frannie Zlotnick)[告诉](https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/)连线杂志。 -Companies depend on open source software for their products and infrastructure. In 2017, the Linux Foundation reported that over [80 percent](https://www.linuxfoundation.org/blog/2017/09/chaoss-project-creates-tools-to-analyze-software-development-and-measure-open-source-community-health/) of the software used in any technology product or service was open source. Open source is vital to the technology industry, but are open source communities healthy? The open source industry is looking at ways to assess project health and stability. As an example, the CHAOSS Project, [announced](https://www.linuxfoundation.org/blog/2017/09/chaoss-project-creates-tools-to-analyze-software-development-and-measure-open-source-community-health/) by the Linux Foundation in September 2017, establishes standard, implementation-agnostic metrics to gauge the overall health of open source communities. One of the key metrics they look at are Diversity and Inclusivity. They’re read the research; D&I is an essential part of a project’s overall health. +公司的产品和基础设施严重依赖于开源软件。在 2017 年,Linux 基金会报道在任何技术产品或者服务中使用的软件有超过 [80%](https://www.linuxfoundation.org/blog/2017/09/chaoss-project-creates-tools-to-analyze-software-development-and-measure-open-source-community-health/) 是开源的。开源对技术产业是至关重要的,但是开源社区是否健康?开源产业正在寻求评估项目健康和稳定性的方法。例如,Linux 基金会于 2017 年 9 月[宣布](https://www.linuxfoundation.org/blog/2017/09/chaoss-project-creates-tools-to-analyze-software-development-and-measure-open-source-community-health/)的 CHAOSS 项目,旨在建立标准且与具体实现无关的指标,来衡量开源社区的整体健康状况。他们关注的核心指标之一是多元化和包容性。他们研究过相关调查,认为多元化和包容性是项目整体健康的重要组成部分。 -While the business case for diversity and inclusion in open source communities is strong, solving the challenges and building a more open culture of individual contributors, maintainers, and project leadership is undeniably challenging. Open source communities present unique challenges because of the way they are created, managed, and sustained over time. +尽管在开源社区中多元化和包容性的商业价值很强大,但解决挑战并为个人贡献者、维护者和项目领导层建立一个更开放的文化确实困难重重。由于开源社区的创建、管理和长期维护方式独特,因此面临着独特的挑战。 -Unlike creating a workforce, an open source community is not hired. A project simply invites the world. It doesn’t select, it accepts. In this unstructured and unplanned way, the community evolves over time. Unlike the workplace, open source communities do not have the same mechanisms to create shared culture. Community members are working with people who may be working for competitors, may reside in very dissimilar cultures, and may have little desire to work well together. Open source communities may lack a leadership mechanism to govern behavior and resolve conflicts. As Gil Yehuda, senior director of Open Source at Verizon Media explains, "Open source projects tend to reward technical skills more so than leadership or management skills. When conflicts come up in a project, the project leaders might not know how to resolve an on-line conflict effectively." Nithya Ruff, senior director, Open Source Practice at Comcast and a member of the Board of Directors at The Linux Foundation, agrees, “So it is unfair to expect them to become great leaders. In some cases, it may be a matter of pairing them with knowledge and best practices. In other cases it might amount to making sure that the project has both a technical leader and a community leader who's able to bring those types of skill sets to the project. We need to bring issues and options out in discussions so that we enable maintainers to do the right thing.” +与建立一支员工队伍不同,开源社区并不是通过招聘形式构建的。开源项目仅是向全世界发出邀请。它不挑选手,而是接纳所有人。正是通过这种非结构化和非计划化的方式,社区随着时间的推移而发展。与职场不同,开源社区没有想通的机制建立共享文化。社区成员可能与为竞争对手工作的人一起工作,可能来自不同的文化背景,并且可能有意愿一起合作。开源社区可能缺少领导机制来监管行为和解决冲突。正如威瑞森媒体的开源高级总监吉尔·耶胡达解释的那样,“开源项目往往更看重技术技能,而非领导或者管理技能。当项目出现冲突时,项目领导者们可能不知道如何有效地解决在线冲突”。康卡斯特的开源实践高级总监、Linux 基金会董事会成员尼提亚·拉夫也表示同意,“因此,期望他们成为优秀的领导者是不公平的。在某些情况下,可能需要将他们与知识和最佳实践相结合。在其他情况下,可能意味着需要确保项目既有技术领导,又有能够将这些技能带到项目中的社区领导。我们需要在讨论中提出问题选择,以便让维护者做出正确的选择”。 -In an open source community, interactions often occur electronically, and usually in English, through mediums such as text messages on GitHub issues, Slack conversations and email threads, or in person at technology conferences. Underrepresented individuals may face a language barrier, feel insecure interacting in a non-native language, miss out on culturally informed idioms, have an unreliable internet connection, lack the resources to travel to open source conferences, and as a result, miss these opportunities to communicate and connect with other community members in the same way that those with greater access do. On the other side, people already participating in these communities may not perceive this communication inclusivity issue, and even more enforcing undesired situations with the use of jargon or subjective references, and new members may feel uncomfortable publicly asking for a clarification or specific meanings. +在开源社区中,互动通常以电子的方式发生,而且通常是英语,通过例如 GitHub 问题上的文本消息、Slack 对话和电子邮件等媒介,或者实在技术交流会上面对面交流。来自少数群体的个人可能面临语言障碍,在使用非母语交流时会感到不安,错过文化相关的惯用语,拥有不可靠的网络连接,缺乏参与开源会议的资源,因此错失了与其他社区成员以相同方式交流和联系的机会。另一方面,已经参与这些社区的人可能没有意识到这种交流包容性问题,甚至会因为使用术语和主观引用而加剧这种不良情况,新成员可能会因为公开要求澄清或者询问具体含义而感到不舒服。 -This lower representation in technology overall points to a shortage of talent overall, and in turn, to a limitation in attracting new contributors into open source communities. Talent shortages slow innovation and up the ante between open source communities competing for the available talent. It also hamstrings corporate contributors who are desperately seeking to add open source talent to their own rosters too. +技术领域总体人才比例较低表明人才总体不足,进而限制了新贡献者加入开源社区。人才短缺会缓慢创新,并且家具开源社区之间争夺可用人才的竞争。它也束缚了那些迫切寻求将开源人才加入他们名单的企业贡献者。 -According to a Linux Foundation’s [Open Source Jobs Report](https://www.linuxfoundation.org/publications/2018/06/open-source-jobs-report-2018/), "87% of hiring managers report difficulty finding open source talent, and nearly half (48%) report their organizations have begun to support open source projects with code or other resources for the explicit reason of recruiting individuals with those software skills." +根据 Linux 基金会的[开源工作报告](https://www.linuxfoundation.org/publications/2018/06/open-source-jobs-report-2018/),“87% 的招聘经理反映很难找到开源人才,将近一半(48%)反映他们的组织已经开始使用代码或者其他资源支持开源项目,其明确目的就是招募拥有这些软件技能的人才。” -Open source communities come under risk if the pool of contributors and maintainers is not maintained at healthy levels which can lead to [open source burnout](https://opensource.com/article/19/11/burnout-open-source-communities). +如果贡献者和维护者的数量没有保持在健康的水平,开源社区将面临风险,这可能会导致[开源倦怠](https://opensource.com/article/19/11/burnout-open-source-communities)。 -> "I'm concerned about the fact that a lot of our projects are going to be very under-resourced. Many projects that a lot of us care about have one or two developers only, and a lot of us are becoming older and gray haired," said [Nithya Ruff](https://www.linkedin.com/in/nithyaruff/), senior director, Open Source Practice at Comcast and a member of the Board of Directors at The Linux Foundation. “As we age, I'm concerned that, in our passing on the knowledge or expanding the contributor community and key projects such that we can sustain those projects, and the only way we can change that is if we open the doors and we do apprenticeships and mentorships and we actually pass the knowledge on and teach people and not just stay with, ‘Ah, it's me, and it'll die when I leave.’" But there’s more at stake than talent pipelines, succession plans, and the success of open source communities. “The other concern is as newer and newer industries get involved in additional transformation and start using open source, it's as much about scaling and welcoming new industries into open source,” says Ruff. “Open source needs to evolve and change and embrace new industries and new people into this and be able to codify and share the culture with them and not just stay static.” +> “我关心的是,我们的很多项目都将面临着资源不足的情况。我们很多人关心的许多项目都只有一个或者两个开发人员,而我们中的很多人正在逐渐老去。”康卡斯特开源实践高级总监、Linux 基金会董事会成员[尼提亚·拉夫](https://www.linkedin.com/in/nithyaruff/)说道。“随着我们年龄的增长,我担心的是,在我们传播知识或扩大贡献者社区以及维持关键项目的可持续性方面会出现问题,而改变这种现状的唯一方法是敞开大门,开展学徒和导师制,真正的传播知识,教授他人,而不是停留在“啊哈,这只有我能做,我离开后他就会消亡””。但这不仅仅是人才梯队、继任计划以及开源社区的成功。“另一个担忧是,随着越来越多新兴行业参与到转型过程中并开始使用开源,这同样需要扩大开源规模并且欢迎新的行业加入开源,”拉夫表示。“开源需要不断演进、改变和拥抱新的产业和新人,并能够与他们指定和共享文化,而不是停滞不前。” -The following tips and guidelines are aimed to help increase the levels of diversity and inclusion within open source communities, with the recognition that each community’s culture is unique. We recognize this is a shared journey, and additional input is always welcomed. +下面的建议和指南旨在帮助提升开源社区内的多元性和包容性水平,同时认识到每个社区的文化是独一无二的。我们深知这是一段共同前行的旅程,并且始终欢迎更多意见。 -In summary, the challenges in open source communities are: +总之,开源社区中的挑战包括: -* Rude and unwelcoming behavior in projects drive away contributors +* 项目中粗鲁和不友好的行为迫使贡献者离开 -* Open source communities have fewer tools for changing culture than organizations +* 相对于组织,开源社区用于改变文化方面的工具较少。 -* English as a primary language can be a barrier to non-native speakers +* 英语作为主要语言对非母语者来说可能是一个障碍。 -* Travel to conferences and face-to-face meetings may be unavailable to economically disadvantaged people +* 经济弱势群体可能无法出差参加大会和面对面会议。 -* Diversity disparity in technology overall limits the pool of diverse contributors to open source communities +* 技术领域的多样性差距总体上限制了开源社区中多样化贡献者的人群规模。 -* The culture that shaped initial open source community efforts is changing, including the value seen in the freedom that open source licenses provide +* 塑造早期开源社区活动的文化正在改变,包括开源许可提供的自由所体现的价值的变化。 -### Using a Data-driven Approach +### 使用数据驱动的方法 -As management consultant Peter Drucker put it: "If you can’t measure it, you can’t improve it." Metrics provide us with insights and best practices to help us succeed—and adjust where needed. This is true in diversity and inclusion efforts as well. Data can help guide us as we strive to increase the levels of diversity and inclusion within our open source communities. +正如管理顾问彼得·德鲁克所说:“如果你不能衡量它,你就不能提升它。”指标为我们提供了见解和最佳实践,帮助我们取得成功,以及必要时进行调整。当我们努力提升开源社区的多元化和包容性水平时,数据可以提供帮助指导。 -You may want to start by determining specific community D&I goals from the outset and then measuring your community’s progress against those goals. +您可能需要在一开始时,确定具体的社区多元性和包容性目标,然后再根据这些目标衡量社区的进展情况。 -For tips and best practices, the [CHAOSS Project’s Diversity & Inclusion Working Group](https://github.com/chaoss/wg-diversity-inclusion), a group strongly rooted in [Mozilla research](https://opensource.com/article/17/9/diversity-and-inclusion-innovation) is a great starting point. This group aims at [bringing together experiences](https://thenewstack.io/how-chaoss-di-can-help-diversity-in-the-open-source-community/) with measuring diversity and inclusion consistently across open source communities , as was done in the [OpenStack Gender Diversity Report](http://superuser.openstack.org/articles/bitergia-intel-report/), and advancing best practices. The group has compiled [dimensions of diversity and inclusion](https://github.com/chaoss/wg-diversity-inclusion/blob/master/demographic-data) that can be used across seven [focus areas of metrics](https://github.com/chaoss/wg-diversity-inclusion#metrics-focus-areas), and uses a [goal-question-metric approach](https://www.cs.umd.edu/users/mvz/handouts/gqm.pdf) to guide the development of metrics. The diversity and inclusion focus areas include: +对于建议和最佳实践,[CHAOSS 项目的多元化和包容性工作组(CHAOSS Project’s Diversity & Inclusion Working Group)](https://github.com/chaoss/wg-diversity-inclusion)是一个绝佳的起点,该组深深植根于 [Mozilla 研究](https://opensource.com/article/17/9/diversity-and-inclusion-innovation)之上。该工作组旨在汇聚开源社区中一致衡量多元化和包容性的[经验](https://thenewstack.io/how-chaoss-di-can-help-diversity-in-the-open-source-community/),正如在 [OpenStack 性别多样性报告](http://superuser.openstack.org/articles/bitergia-intel-report/)所做的那样,并推动最佳实践发展。该工作组已经汇编了[多样性和包容性的维度](https://github.com/chaoss/wg-diversity-inclusion/blob/master/demographic-data),这些维度可以在七个[指标的关键领域](https://github.com/chaoss/wg-diversity-inclusion#metrics-focus-areas)中应用,并使用[目标-问题-指标方法](https://www.cs.umd.edu/users/mvz/handouts/gqm.pdf)来指导指标的发展。多元化和多样性关键领域包括: -* Event Diversity: How well are events set up to include diverse people? +* 活动多元化:活动的设置是否有利于吸引多元化的人群参与? -* Contributions: What is the diversity of the contributions within a community, and how are these different contributions valued? +* 贡献:社区内贡献的多元化怎么样,以及这些不同的贡献是如何被评价的? -* Communication Inclusivity: How diverse and inclusive is the communication among existing and potential contributors? +* 沟通的包容性:现有的和潜在的贡献者之间沟通的多元化和包容性是怎样的? -* Recognition of Good Work: How is ‘good work’ recognized and rewarded in a way that is inclusive? +* 对优秀工作的认可:如何以包容性的方式认可和奖励“优秀工作”。 -* Leadership: Is leadership appropriately designed for inclusion, and how well is the group functioning? +* 领导力:领导层是否适当的为包容性进行了设计,以及团队是如何运作的? -* Governance: How well are components of governance setup to enforce standards for inclusion? +* 治理:治理的各个组成部分在执行包容性标准方面的效果如何? -* Project and Community: How well are interfaces for community engagement, like project repositories and community design, setup for diverse people, perspectives and goals? +* 项目和社区:项目仓库和社区设计等社区参与界面,在为多样化人群、观点和目标设置方面,做得如何? -You can also look to other open source communities for inspiration. +你还可以从其他开源社区中寻求灵感。 -> "People across the TODO group membership are doing some really amazing things in terms of how they demonstrate support for inclusion in their projects as well as in their Open Source Program Offices (OSPOs) and in how they interact with the community," said Nithya Ruff. “Perhaps capturing those best practices across the communities and aggregating and curating may be a good approach to take. One example is diversity scholarship sponsorships. A lot of us build healthy objectives into our own projects and sponsor events that are around diversity, so that's one approach that would be good to take.” +> 尼提亚·拉夫表示,“TODO 小组的成员们在他们的项目中、开源项目办公室以及他们与社区的互动中,都在以令人惊叹的方式展示着对包容性的支持。”“也许将这些社区的最佳实践进行汇总和整理会是一个不错的方法。一个例子就是设定多元化奖学金赞助。我们中的很多人都在我们的项目中设定了健康的目标,并赞助与多样性相关的活动,因此,这会是一个值得采纳的方法。” -Some good examples of diversity data reports exist and you can use those as templates for what data to look for and measure. You might want to start reviewing those listed on [Open Diversity Data](http://opendiversitydata.org/). +已经存在一些多元化数据报告的优秀样例,你可以以这些样例作为模板来了解需要查和衡量需要哪些数据。你可以从查阅[开源多样性数据](http://opendiversitydata.org/) 列出的样例开始。 -Beware of relying on "vanity metrics" that can make a community appear healthier than it really is. Vanity metrics skew results most often by measuring a less diverse group with another group that is more diverse to artificially inflate diversity numbers of the first group. An example in the corporate world would be to measure diversity by the numbers in the entire engineering department, which contains engineers and administrative assistants, rather than measuring diversity solely within the engineering job title. +当心依赖于“虚荣指标”,它们会让社区看起来比实际更加多元化。虚荣指标通常通过将一个多元化较低的人群与一个多元化较高的人群进行比较来扭曲结果,从而人为地夸大第一个群体的多元化数字。企业领域的例子就是用整个工程部门的人数来衡量多样性,该部门既包含工程师也包含行政助理,而不是仅仅衡量工程师职位的内部多样性。 -To help avoid accidental vanity measurements and get the true measure of progress, consider the following guidelines listed on the [ProjectInclude.org website](http://projectinclude.org/measuring_progress#existing-diversity-data-reports). +为避免出现意外的虚荣度量,并且获得真正的进展度量标准,可以参考以下列举在[ ProjectInclude.org](http://projectinclude.org/measuring_progress#existing-diversity-data-reports) 网站的指南。 -### Inclusion: Retaining Diverse Contributors +### 包容性:保留多元化的贡献者 -While diversity focuses on bringing underrepresented people into a community, inclusion is about making people feel welcome and supported within that community. Building inclusive communities is a good first step to ensure that all contributors can participate to their fullest potential within a community. Without an inclusive community, you risk diverse contributors not participating for long, and leaving your community for others that are more welcoming and appreciative of their contributions. +尽管多元化注重于将代表性不足的人群吸纳进社区,包容性则是让人们在社区内感到受欢迎和得到支持。建立包容性的社区是确保所有贡献者能在社区内充分发挥潜力的良好第一步。如果没有包容性的社区,你将面临多元化的贡献者不会长期参与,以及离开你的社区,转而投向那些更欢迎和欣赏他们贡献的其他社区的风险。 -Possible solutions all stem from one goal succinctly stated by the Node.js Inclusivity Working Group in the [code of conduct](https://github.com/nodejs/inclusivity/blob/master/CODE_OF_CONDUCT.md): "Increasing inclusivity means making the project a safe and friendly place for people from diverse backgrounds." +可能的解决方案都源于 Node.js 包容性工作组在[行为准则](https://github.com/nodejs/inclusivity/blob/master/CODE_OF_CONDUCT.md)中简明扼要地提出的一个目标:“提高包容性意味着让项目成为来自不同背景的人们的安全友好之地。” -The most successful approaches to making the community safe and friendly are sustained efforts. Approaches initiated and maintained consistently work more effectively than sporadic efforts with little follow-through. It is also important to guard against waning commitment after the initial rush of enthusiasm. +使社区变得安全和友好的最成功方法是持续的努力。从一开始就持续不断地努力的方法比偶尔且没有后续跟进的努力更有效果。还需要警惕在最初的热情消退后,承诺的减弱。 -The important thing—whether in beginning to build an inclusive community or in improving one—is that the intent be obviously authentic and sincere rather than begrudging and shallow. While the goal is to build-in inclusiveness to the degree that it becomes an ingrained norm, this does not happen by accident. It takes substantial effort to build a community where all feel secure and openness is ubiquitous. +无论是开始建设一个包容性的社区,还是改善已有社区,其重要之处在于,其意图必须明显表现出真诚而非勉强和肤浅。虽然目标是建立包容性到成为根深蒂固的规范程度,但这并非偶然。要建立一个所有人都感到安全和开放无处不在的社区,需要付出大量的努力。 -Here are recommendations to build and maintain inclusiveness: +这里有一些关于建设和维持包容性的建议: -**Make it easy to contribute.** Some great starting points for newcomers include documentation and tutorials—they help bring newcomers up to speed quickly and participate in a way that fits more smoothly with the group. Small, defined tasks both clarify project needs and broaden the number of people contributing to filling those needs. These tasks could be marked as "good-first-issue" for discoverability and more experienced community members should be prepared to leave the tasks open while being ready to mentor anyone who attempts them. +**使贡献变得容易。** 对新人来说,一些好的起点包括文献和教程——它们能帮助新人迅速提升能力,并以一种更平滑的方式参与小组。一些明确且较小规模的任务既可以明确项目的需求,又可以扩大参与满足这些需求的人数。这些任务可以标记为“适合初学者的好问题”,以便于发现,同时,经验丰富的社区成员应当准备好保持这些任务开放,同时准备好指导任何尝试它们的人。 -**Recognize all contributions.** While code is the center of any community, it’s not the only necessary task. "You can attract a more diverse set of perspectives and opinions when you count contributions that are not just code," says [Guy Martin](https://www.linkedin.com/in/guywmartin/), director at Open@ADSK (Autodesk). “When you count answering questions, when you count contributing documentation, when you count people who are working on outreach, people working on design and technical writing for the documentation—these are ways to widen the scope of what you're looking at in terms of what's a contribution.” The challenge is recognizing contributions that are not logged in collaboration tools (e.g., code repositories, mailing lists, forums) such as community management, event organizing, marketing, and outreach. +**承认所有贡献。** 尽管代码是任何社区的中心,但并不是唯一必要的任务。Open@ADSK(Autodesk)的总监 [盖·马丁](https://www.linkedin.com/in/guywmartin/) 表示:“当你不仅统计代码方面的贡献时,你就可以吸引更多不同观点和意见的人。”“当你计算回答问题、贡献文档、进行对外联络、从事文档的设计和技术写作等工作的次数时,你就能扩大你眼中贡献的范畴。”挑战在于认可那些没有在协作工具(例如代码库、邮件列表、论坛)中记录的贡献,比如社区管理、活动组织、市场营销和对外联络等。 -**Create an accepting culture.** While it is important to have common goals in the community, conformity in thinking is the antithesis of creativity and innovation. But, speaking out and offering new ideas can be nerve-wracking for anyone. You can [create a welcoming culture](https://opensource.guide/building-community/) where new ideas and new ways of thinking or doing things is accepted, whether it is coming from an established community member or a newcomer, using these principles: +**营造包容的文化氛围。** 尽管在社区中拥有共同的目标很重要,但是思维上的一致性是创造力和创新性的反面。然而,对于任何人来说,发表观点,提出新想法都可能是令人紧张的。你可以通过以下原则来[营造欢迎文化](https://opensource.guide/building-community/),让新想法和新的思维方式以及做事方法都能被接受,无论他们是资深社区成员还是新手。 -**Welcome newcomers.** Make a point for community leaders and members to reach out and welcome newcomers as soon as they arrive. +**欢迎新人。** 让社区领导和成员引起重视,在新成员一到就主动与他们联系,表示欢迎。 -**Set expectations**. Make it known how members are expected to receive and treat newcomers. Also set expectations on accepting more contributions and ideas from existing members who may have previously been discouraged from participating. +**设定期望。** 明确成员们应当如何接待新成员。同时,也要设定期望,让之前因受打击而未积极参与的现有成员能够接受更多的贡献和想法。 -**Don’t accept bad behavior and speak out when it happens.** Make bullying, name calling, stereotyping, humiliation and other negative behavior taboo in the community. When these behaviors are unwelcome, individuals will have to communicate with more thought and sensitivity. And really, it’s just asking everyone to act civilly as they would anywhere else. Modeling tactful behavior in calling out bad behaviors also helps resolve issues. +**不接受不良行为,发生时要大胆说出。**在社区中,应当禁止欺凌,侮辱,刻板印象、羞辱和其他负面行为。当这些行为是不受欢迎的,人们将不得不更加周到和敏感的方式进行交流。事实上,这只是要求每个人像在其他任何地方一样,表现得有礼貌。以巧妙的方式指出不良行为也将有助于解决问题。 -**Listen.** Accepting begins with listening and so does issue resolution. Sometimes misunderstandings happen, especially where language and cultural differences exist. It’s important to sort these out before anyone reacts to anything. Active listening also means listen to everyone with an open mind. Don’t discount ideas or complaints – or accept excuses -- out of hand. Look into issues and search for solutions. Then look again for ways to ensure the environment isn’t fostering such behaviors elsewhere in the community. +**倾听。** 接纳始于倾听,问题解决也是。有时误解会发生,尤其是语言和文化差异存在。在任何人对任何事做出回应前,整理这些非常重要。积极倾听也意味着以开放的心态倾听每个人的意见。不要轻易否定想法或投诉,也不要轻易接受借口。要正视问题并且搜寻解决方案。然后再次寻找方法,确保社区其他地方的环境下不会助长此类行为。 -**Be kind.** Even old timers in the community will feel more relaxed and respected when kindness prevails. Newcomers will feel even more so. However, inclusiveness is more than just good manners. People can still be mistreated without voices being raised or threats made directly. You can combat this with sustained and expressed emphasis on kindness and professional courtesies. +**要友善。**当友善成为主流时,即使是社区中的老成员也将感到更加轻松和受到尊重。新成员更是如此。然而,包容性不仅仅是礼貌问题。即使没有提高嗓门或者直接发出威胁,人们仍然可能会受到不公正对待。你可以通过持续强调友善和专业礼仪来应对这一问题。 -**Adopt a code of conduct and enforce it**. In reality, bad behavior does happen in open source communities, whether or not it is intentional. Situations can get heated and communications may fall short of professional standards. Small acts of misconduct can easily escalate in an online community and harm project participants or [the project itself](http://writing.jan.io/2015/11/20/sustainable-open-source.html). A Code of Conduct (CoC) is a social contract that encourages good behavior and discourages bad behavior in a community. A CoC helps address these issues and how they are to be resolved. It isn’t always easy to get all members of a community to accept a CoC, but it’s almost impossible to take steps to make and maintain a healthy, diverse and inclusive community without a CoC that can be, and is, enforced. Here is [a good template](https://www.contributor-covenant.org/) to use, along with a great [blog](https://medium.com/mozilla-open-innovation/how-were-making-code-of-conduct-enforcement-real-and-scaling-it-3e382cf94415) describing an example of an enforcement workflow. +**制定行为准则并且执行它。**事实上,不良行为确实在开源社区中发生,无论是否故意。情况可能会变得紧张,沟通可能达不到专业标准。在线社区中,轻微的不当行为很容易升级,并且伤害项目的参与者们或者[项目本身](http://writing.jan.io/2015/11/20/sustainable-open-source.html)。行为准则是社区中的一种社会契约,它鼓励良好的行为并阻止不良行为。行为准则有助于解决这些问题,并指出如何解决这些问题。尽管让社区的所有成员接受行为准则并不容易,但如果没有可以执行且确实执行的行为准则,几乎不可能采取措施建立和维护一个健康、多元化和包容性的社区。这里有一个[好的模板](http://writing.jan.io/2015/11/20/sustainable-open-source.html)可供使用,还有一篇精彩的[博客](https://medium.com/mozilla-open-innovation/how-were-making-code-of-conduct-enforcement-real-and-scaling-it-3e382cf94415)描述了一个执行工作流程的例子。 -A CoC addresses these types of issues: +行为准则解决以下几类问题: -* when people disagree about a very contentious issue +* 当人们在一个非常有争议的问题上存在分歧 -* when someone checks in code that breaks an important feature +* 当有人提交的代码破坏了重要功能时 -* when people join a project midstream and lack context about an old issue +* 当人们在中途加入项目,并且缺乏对老问题的背景了解时 -* when people are unclear in their communication style +* 当人们对他们的交流风格不清楚时 -* when language and culture cause people to misunderstand +* 当语言和文化导致人们产生误解时 -* when someone feels the need to leave the community +* 当有人感觉需要离开社区时 -* when insults, threatening words or unwanted sexual attention occurs +* 当出现侮辱、威胁性语言或者不受欢迎的性注意时 -"Some people think the Code of Conduct is there to weed out people or to police online behaviors," says [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), senior director of Open Source at Verizon Media. “I think Codes of Conduct are more method for reminding all people to act with respect, even when things are stressing the community. A project leader can point to the code before something unravels into a fight, and that’s better than waiting for a complaint to be issued.” +威瑞森媒体的开源部门的高级主管[吉尔·耶胡达](https://www.linkedin.com/in/gilyehuda/)表示:“有些人认为行为准则就是为了淘汰人或者监管在线行为,”。“我认为行为准则更多的是一种提醒所有人保持尊重的方法,即便是在社区压力重重的时候。项目负责人可以在事情演变成争吵之前引用该准则,这总比等着投诉来得更好。” -It’s also wise to have an escalation path, or workflow, in place beforehand so that you’re prepared to enforce the Code of Conduct. Additionally, being clear on who is involved in [decisions](https://github.com/mozilla/diversity/blob/00f56b3c9c182a23a070e2bc523dcad6896bb34b/code-of-conduct-enforcement/investigation/working-group/role-groups.md) on that pathway will save time, and reduce complexity. With an escalation path and decision-making framework in place, problems can be addressed quickly and uniformly without generating disruptive chaos. "We can't prevent harassment or abuse from happening, but we can enforce the consequences and protect the community from a downward spiral," says Gil Yehuda. “A prepared workflow means we can react quickly when there's a report. We’ll then run a review process offline, and report back to the community indicating there was an issue, and that we request that the issue is not discussed on the community forum,” Yehuda explained. +提前做好升级路径或者工作流程也很明智,这样你就能够为执行行为准则做好准备。此外,明确谁将参与该路径上的[决策](https://github.com/mozilla/diversity/blob/00f56b3c9c182a23a070e2bc523dcad6896bb34b/code-of-conduct-enforcement/investigation/working-group/role-groups.md),将节省时间并减少复杂性。有了升级路径和决策框架到位,问题能够被迅速和一致性的解决,而不会产生破坏性的混乱。吉尔·耶胡达说道:“我们无法阻止骚扰或者虐待行为的发生,但是我们可以强制执行后果并保护社区免于走下坡路。”“预先准备好的工作流程意味着当收到举报时,我们能够快速做出反应。我们会在先线下开展审核流程,并且向社区报告存在问题,并请求不要再社区论坛上讨论这个问题。” Yehuda 解释道。 -**5. Consider ways to make your project more accessible.** Focus on enabling internationalization within your projects. Specifically, take steps to break the language barrier, which will improve D&I contributions. Make all your documentation, tools, and official communication channels fully accessible to people with disabilities. The effect on your community will be very similar to breaking the language barrier. Improving the contributing experience for the most difficult cases improves the experience for everyone. A few ‘small start’ suggestions may include providing transcriptions and/or subtitles if you use YouTube, translating documentation into multiple languages, and live streaming your events. To put focus on these inclusion issues and formalize their status, a community may adopt [a tag for inclusion bugs](https://medium.com/@sunnydeveloper/squash-inclusion-bugs-982a3e5ee29d). +**考虑如何让你的项目更易访问的方法。** 在项目中注重国际化。具体而言,采取措施打破语言障碍,这将有助于改善多元化和包容性的贡献。让所有文档、工具以及官方通讯渠道可以让残障人士访问。这对你的社区的影响将类似于打破语言障碍。改善最困难案例的贡献体验也将改善所有人的体验。一些“从小处着手”的建议可能包括:如果你使用 Youtube 发布内容,可以提供文字转录和/或字幕,将文档翻译成多种语言,以及直播你的活动。为了关注这些包容性问题并使其地位正式化,社区可以采取[包容性漏洞标记](https://medium.com/@sunnydeveloper/squash-inclusion-bugs-982a3e5ee29d)。 -### Attracting Diverse Contributors +### 吸引多元化贡献者 -When you’re ready to turn your attention to recruiting diverse contributors into your open source community, here are some guidelines to get you started. +当你准备好将注意力转向为你的开源社区招募多元化贡献者时,以下是一些可供你入门的参考指南。 -**1. Set goals and measure against them.** You have to know what you’re aiming for if you’re ever going to hit the target. Name your goals and put tracking and metrics in place so you can manage your progress. As noted earlier, the CHAOSS Project’s Diversity & Inclusion Working Group can be a useful resource. +**1. 设定目标并加以衡量。**如果你想要实现目标,就必须知道自己的目标是什么。明确你的目标,并落实追踪和衡量标准,以便你可以管理你的进展。正如前面提到的,CHAOSS 项目的多元化和包容性工作组可以作为一个有用的资源。 -**2. Include goals for diversity in project documentation**. But don’t stop there. Communicate goals and actions to the community and ask them to assist. +**2. 在项目文档中包含多元化的目标**。但是不能止步于此。与社区成员沟通目标和行动,并且向他们寻求帮助。 -**3. Create a working group to proactively broaden the project’s appeal.** A good example of such a group is [The Node.js Inclusivity Working Group](https://github.com/nodejs/inclusivity), which "exists to improve inclusivity and diversity in the Node.js project and surrounding community." Another great example is the [OpenStack Diversity Working Group.](https://wiki.openstack.org/wiki/Diversity) +**3. 创建一个工作小组来积极主动的扩大项目的吸引力。** 这样一个工作小组的优秀的例子是[Node.js 包容性工作小组](https://github.com/nodejs/inclusivity),它“存在是为了提升 Node.js 项目和周边社区的包容性和多元化。”另一额优秀的案例是 [OpenStack 多元化工作小组。](https://wiki.openstack.org/wiki/Diversity) -**4. Set diversity and inclusion goals/initiatives for events.** Work your networks to identify and invite individuals to your event as speakers and panelists who fit your diversity goals. Recruit advisors from diverse backgrounds to help you communicate in a way that speaks to the people you have the hardest time attracting to your event. Communicate diversity and inclusion expectations from the first call for participation to the closing remarks at the event. Check out this [30-minute presentation by Christopher Neugebauer, Josh Simmons, Sam Kitajima-Kimbrel](https://www.youtube.com/watch?v=C7ZhMnfUKIA) as an inspiration to running an inclusion-first event. +**4. 为活动设定多元化和包容性目标/倡议。** 利用你的关系网络,找到并邀请符合你多元化目标的个人作为你活动的演讲者或者座谈小组成员。招募来自不同背景的顾问,以帮助你以最能吸引难以参加你活动的演讲者的方式进行沟通。从首次发布参与到活动闭幕,都要传达多元化和包容性的期盼。观看[克里斯托弗·诺伊格鲍尔、乔希·西蒙斯和山姆·基塔吉马-金布雷尔的30分钟演讲](https://www.youtube.com/watch?v=C7ZhMnfUKIA),作为举办以包容性为首的活动的灵感来源。 -**5. Connect with other community managers to share best practices/ ideas.** The bigger open source community is your community too. Reach out to other community managers to learn what they’ve done that has worked, and to [share your own ideas and experiences in D&I](https://groups.google.com/forum/#!forum/diversity--inclusion-in-open-source). +**5. 联系与其他社区管理者分享最佳实践/想法。** 规模更大的开源社区也是你的社区。你可以联系其他社区的管理者,学习他们的成功做法,也可以[分享自己在多元性和包容性方面的想法和经验](https://groups.google.com/forum/#!forum/diversity--inclusion-in-open-source)。 -**6. Be proactive about reaching outside of your network.** You might consider supporting existing efforts or creating new groups outside your network that people from other networks can join in too. +**6. 积极主动的扩展你的关系网络。** 你可能考虑继续支持现有的倡导工作,或者创建关系网之外的新小组,使来自其他网络的人也可以加入。 -**7. Request that project leadership attend diversity training**. Diversity training is different than sensitivity training. Sensitivity training is centered on awareness of one’s own prejudices and the sensitivity of others. Diversity and inclusion training "focuses on providing the knowledge, skills, and tools for working with diverse teams to enhance performance and impact the bottom line. This type of training is a key component of a diversity and inclusion plan,"[according to](https://www.kparksconsulting.com/tips-moving-sensitivity-training-to-inclusion-business/) K. Parks Consulting. This type of training will better equip you for the quest ahead. For example, the CNCF requires all of its community event speakers to attend [inclusive speaker orientation training](https://training.linuxfoundation.org/training/inclusive-speaker-orientation/). +**7. 要求项目负责人参加多元化的培训**。多元化的培训不同于敏感性培训。敏感性培训以认识自己的偏见和他人的敏感性为中心。多元化和包容性训练“注重于为多样化团队提供知识、技能和生产工具来提升业绩和影响最终结果。这种类型的训练时多元化和包容性计划的关键组成部分,”[根据](https://www.kparksconsulting.com/tips-moving-sensitivity-training-to-inclusion-business/) K.帕克斯咨询公司表示。这种类型的训练将更好地装备你探索未来。例如,云原生计算基金会要求所有社区活动演讲者参加[包容性演讲者定向培训](https://training.linuxfoundation.org/training/inclusive-speaker-orientation/)。 -### Other Recommendations +### 其他推荐 -Research and information abounds to spark ideas and guide your progress. And you are not alone in this quest—many others are working on improving their communities too and are open to sharing and exchanging ideas. Further, the number of established programs you can join and support are growing every day. The fruits of those efforts will benefit the open source community at large, as well as your community. Here are a few other programs and steps that you might want to consider: +有大量的研究和信息可以激发你的想法和指导你进步。而且你并不孤单——许多其他人也在努力改善他们的社区,并且乐于分享和交流想法。此外,你可以参与和支持的已成立的项目数量每天都在增长。这些努力的果实将在很大程度上有益于开源社区,以及你的社区。下面有一些你可能需要考虑的其他项目和步骤: -* Participate in internship programs to grow diversity, such as [Summer of Code](https://summerofcode.withgoogle.com/) and[Outreachy](https://www.outreachy.org/) or run your own, e.g., through [CommunityBridge](https://communitybridge.org/). +* 参与实习项目来增加多元化,例如 [Summer of Code](https://summerofcode.withgoogle.com/) 和 [Outreachy](https://www.outreachy.org/) 或者开展你自己的活动,例如,通过 [CommunityBridge](https://communitybridge.org/)。 -* Provide transparency reports around D&I. The "Gender Diversity in the OpenStack Community" [report](https://superuser.openstack.org/articles/2018-gender-diversity-report/) is one good example. +* 提供关于多元化和包容性的透明报告。“OpenStack 社区性别多元化”[报告](https://superuser.openstack.org/articles/2018-gender-diversity-report/)就是一个优秀的例子。 -* Offer travel and training scholarships for project related events. Many foundations offer diversity scholarships and travel programs, including the Linux Foundation, Cloud Native Computing Foundation and OpenStack Foundation. +* 为项目相关的活动提供差旅和培训费用。许多基金会提供多元化奖学金和培训项目,包括 Linux 基金会,云原生计算基金会和 OpenStack 基金会。 -* Start proactively outreaching for diverse speakers. To get you started, here’s [a list of female tech speakers and organizers](https://github.com/fempire/women-tech-speakers-organizers) on GitHub. Another connection to find women speakers is @CallbackWomen, a Twitter account for women who are tech speakers. +* 开始积极主动地接触多元化演讲者。为帮助你入门,这里是 GitHub 上的[女性技术演讲者和组织列表](https://github.com/fempire/women-tech-speakers-organizers)。寻找女性演讲者的另一个途径是关注 @CallbackWomen,这是一个为技术领域女性演讲者设置的推特账号。 -All of the above are the lessons learned and insights gained so far. No doubt there will be many more. Feel free to add your thoughts, ideas, lists and programs as well. +以上所述都是我至今为止所学到的经验和洞见。毫无疑问,未来还将更多。欢迎你也来分享你的想法、观点、清单和计划。 -## Acknowledgements +## 致谢 -We would like to thank Amye Scaravada, Chris Aniszczyk, Daniel Izquierdo, Emma Irwin, Georg Link, Gil Yehuda, Leslie Hawthorn, Matt Germonprez, Nicole Huesman and Nithya Ruff for their contributions to this guide. \ No newline at end of file +我们感谢 Amye Scaravada、Chris Aniszczyk、Daniel Izquierdo、Emma Irwin、Georg Link、Gil Yehuda、Leslie Hawthorn、Matt Germonprez、Nicole Huesman 和 Nithya Ruff 对本指南所做的贡献。 diff --git a/content/zh-CN/guides/impact.md b/content/zh-CN/guides/impact.md index f913318d..e8848a54 100644 --- a/content/zh-CN/guides/impact.md +++ b/content/zh-CN/guides/impact.md @@ -1,265 +1,272 @@ --- -title: Improve your open source development impact +title: 提升你的开源开发影响力 --- -Open source development requires a different approach to software engineering than many organizations are accustomed to. It becomes easier if you have a clear plan to follow. Fortunately, many companies and individuals have already forged a path to success by contributing to significant open source projects in strategic ways. This practical guide will help you and your company improve your internal development process and prepare you to contribute to the open source projects that matter most to your company. Contributing to the Linux kernel is one of the hardest challenges for open source developers. So we’ll use this case as an example for this guide. Fortunately, the guidance will apply to nearly any open source project you’ll face. +开源开发与许多组织所熟悉的软件工程方法不同,它需要一种新的思路。如果你能遵循一个明确的计划,这个过程会变得更加简单。幸运的是,许多公司和个体已经通过战略性地贡献于重要的开源项目,找到了成功的路径。本实用指南将帮助你和你所在的公司优化内部开发流程,并准备好为那些对公司至关重要的开源项目做出贡献。对Linux内核的贡献是开源开发者面临的最大挑战之一,因此我们以这个案例为例来说明。幸运的是,这些指导原则几乎适用于你将遇到的所有开源项目。 -## What is impactful open source development? -Developer contributions are one of the primary ways that your open source program will achieve the business goals you’re supporting with your organization’s open source strategy. There are many ways to influence the direction of an open source project, from testing code in different environments and adding to the code documentation, to funding the project or foundation and participating on the project board, or by using the code in other open source projects. But your company will exert the greatest influence in open source projects through the quality, quantity, and consistency of its code contributions. So it is in your organization’s best interest to provide the tools and processes that will help your team develop high-quality, effective open source code. +## 什么是有影响力的开源开发? -Impactful open source code can influence the technical direction of the open source projects you contribute to, which in turn improves your products while minimizing the cost of maintaining that code. +开发者的贡献是实现组织开源战略支持的商业目标的关键途径。影响开源项目方向的方法有很多,比如在不同的环境中测试代码、完善代码文档、资助项目或基金会、参与项目管理委员会,或者在其它开源项目中应用这些代码。然而,公司通过代码贡献的质量、数量和持续性,能在开源项目中产生最大的影响力。因此,为了组织的最大利益,应当提供工具和流程,帮助团队开发出高质量、高效的开源代码。 -The goal is to improve your development team’s efficacy through and with open source contributions. By helping your organization implement some of the recommended open source development best practices laid out below you can: +具有影响力的开源代码能够左右您所参与的开源项目的技术走向,这样做不仅能够提升您的产品性能,同时还能降低代码维护的成本。 -* Reduce the amount of work needed from product teams -* Minimize the cost to maintain source code and internal software branches -* Improve code quality -* Produce faster development cycles -* Produce more stable code to serve as the base for products -* Improve company reputation in key open source communities. +我们的目标是利用开源贡献来提升开发团队的工作效率。通过帮助你的组织采纳下面推荐的一些开源开发最佳实践,可以实现以下效果: -## The role of an open source program in improving development +减轻产品团队的工作负担 +降低维护源代码和内部软件分支的成本 +提升代码质量 +加快开发周期 +生成更稳定的代码,作为产品的基础 +在关键的开源社区中提升公司的声誉。 -Your open source program can have both direct and indirect positive impacts on your products – whether they are consumed internally as infrastructure or services, or shipped as a commercial offering. These are impacts that you can measure and improve. They also provide tangible results to report to executive leadership – helping to show the value of your open source program and deliver ROI. +## 开源项目在提升开发效率中的作用 -## Direct enablement +您的开源项目不仅能对内部使用的基础设施或服务产生直接和间接的积极影响,也能对作为商业产品发布的产品产生同样的效果。这些影响是可以被衡量和优化的,它们为向高层领导汇报提供了具体成果——有助于展示开源项目的价值,并实现投资回报。 -Your open source program can directly impact your organization’s open source code development by contributing the code itself. Every company structures its open source program and engineering contributions according to what best fits its own business goals and corporate structure (See the [program structure section](https://www.linuxfoundation.org/creating-an-open-source-program/#4) in our guide on Creating an Open Source Program). But contributing code is the best way to gain influence in an open source project and build your company’s reputation in the open source community. +## 直接赋能 -At Samsung, the open source program has its own dedicated engineering team which fulfills open source development requests from the company’s R&D and product teams. The program also helps bring internal Samsung code into various open source projects. And it has implemented numerous drivers related to Samsung products into upstream code. Product teams have their own developers who contribute to open source projects but they have less freedom as they are tied to product development. So the open source group receives requests such as “we need feature X implemented in the Kernel” and their engineering team delivers the code to product and to the Linux kernel. +您的开源项目可以通过直接贡献代码,来直接影响组织在开源代码开发方面的工作。每个公司都会根据自身的业务目标和公司架构来构建开源项目和工程贡献(详情请参阅我们关于创建开源项目的指南中的[项目结构部分](https://www.linuxfoundation.org/creating-an-open-source-program/#4))。然而,贡献代码是在开源项目中获得影响力并在开源社区中树立公司声誉的最有效方式。 -> “Our expertise in committing code upstream has made us particularly valuable with these open source components, and our efforts have resulted in a reduction in the amount of effort required to maintain kernel code that’s used in Samsung products and services.” – [Ibrahim Haddad](https://twitter.com/ibrahimatlinux), Vice President of R&D and Head of the Open Source Group at Samsung Research America. +在三星,开源项目拥有一支专门的工程团队,负责满足公司研发和产品团队的开源开发需求。这个项目还帮助将三星内部的代码引入到多个开源项目中,并已将许多与三星产品相关的驱动程序整合到上游代码中。虽然产品团队也有自己的开发者参与开源项目,但由于他们主要专注于产品开发,因此自由度相对较低。开源组会接到诸如“我们需要在内核中实现功能X”的请求,然后他们的工程团队会负责将代码提供给产品和Linux内核。 -Open source program offices that are focused only on policy and process don’t always have a dedicated engineering team for contributing code. Instead, engineers across departments allocate a portion of their time to pushing code upstream for any changes they make to open source components. +> “我们在将代码贡献到上游方面的专业能力,使得我们在这些开源组件的开发中发挥了特别重要的作用。我们的努力也显著减少了维护三星产品和服务的内核代码所需的工作量。”——[Ibrahim Haddad](https://twitter.com/ibrahimatlinux),三星研究美国公司研发副总裁兼开源团队负责人。 -Regardless of how the engineering team is structured, the goal is to minimize the technical debt with respect to those components. If upstream contributions do not happen, the product team will be stuck with large code bases that are out of sync with upstream. They’ll spend their time back-porting the updates to their out-of-sync fork instead of advancing the product. +那些只关注政策和流程的开源项目办公室通常没有专门用于贡献代码的工程团队。相反,不同部门的工程师会将他们的一部分时间用于将他们对开源组件所做的任何修改推送到上游。 -Often an open source developer embedded in a product team will have a hard time striking any balance between upstream work and responsibilities (as a committer or maintainer) and their role in making the product happen. +无论工程团队的结构如何,目标都是尽量减少与这些组件相关的技术债务。如果不上游贡献,产品团队将不得不处理与上游不同步的大型代码库。他们将忙于将更新反向移植到不同步的分支上,而不是推进产品的发展。 -Each open source program office is uniquely structured depending on the needs of the business. Facebook, for example, has a dedicated Tools team within the open source program office that is responsible for building internal tools to help manage its open source portfolio. This includes the projects that Facebook shares, which are mostly hosted on GitHub, as well as the other external projects they contribute to such as the Linux kernel. (See our case study on [Facebook’s open source program](https://github.com/todogroup/guides/blob/master/casestudies/facebook.md).) +通常,嵌入在产品团队中的开源开发者很难在上游工作和责任(作为提交者或维护者)与他们在产品开发中的角色之间找到平衡。 -## Indirect Enablement +每个企业的开源项目办公室结构都是根据其业务需求量身定制的。以Facebook为例,他们在开源项目办公室中设立了一个专门的工具团队,这个团队负责开发内部工具,以帮助管理Facebook的开源项目组合。这包括Facebook在GitHub上分享的项目,以及他们参与贡献的其他外部项目,例如Linux内核。(详情请参阅我们关于[Facebook开源项目](https://github.com/todogroup/guides/blob/master/casestudies/facebook.md)的案例研究。) -The open source program’s impact goes beyond the code the organization contributes to the various open source projects, however. From public relations and marketing, to legal support, developer training, and more, an open source program enables development in myriad ways. Here are four ways that the program can indirectly improve development through non-code contributions: +## 间接赋能 -1. **External technical discussions.** One major area to make indirect contributions is by influencing the various communities through participation in technical discussions. Your open source developers can do this by being active on mailing lists and IRC chats to participate in discussions and stay informed on the latest project updates. And on larger projects with formal governance structures you can sit on technical steering committees. +开源项目的影响不仅限于对各种开源项目的代码贡献。它还包括公关、市场营销、法律支持、开发者培训等多方面的贡献,从而以多种方式促进开发。以下是开源项目通过非代码贡献间接提升开发的四种途径: -2. **Internal technical discussions.** Internally, open source developers can participate in policy and architecture discussions to ensure the organization’s decisions match the direction of a specific project community. Open source developers should be present for any strategy discussions related to long-term planning for products that rely on open source code, for example. +1. **参与外部技术讨论。** 通过参与邮件列表和IRC聊天等,开源开发者可以在技术讨论中发挥影响力,了解项目最新动态,并在大型项目中加入技术指导委员会。 -3. **Compliance support.** Program managers can also provide assistance to resolve compliance issues and support the compliance team with the open source compliance inquiries they receive. +2. **参与内部技术讨论。** 开源开发者应参与公司内部的政策和架构讨论,确保公司决策与依赖的开源项目方向一致,特别是在产品长期规划方面。 -4. **Bug fixes.** Finally, you can also help stabilize the code of the various open source projects you’re involved in. Find and fix bugs, test the fix and submit it upstream. This improve the code’s overall value for all the project’s users, including your company. +3. **提供合规支持。** 项目经理可以帮助解决合规问题,并支持合规团队处理开源合规方面的咨询。 -## Common areas for improvement +4. **参与错误修复。** 开源开发者还可以帮助稳定项目的代码质量,通过找到并修复错误,然后提交给项目上游,从而提升代码对整个社区的价值。 -There are three general areas in which open source programs can improve developer productivity and efficacy in open source projects: culture, processes, and tools. Within each of these categories, there are several elements that you will need to address to fit the open source model. + +## 常见的提升领域 + +开源项目可以在三个主要方面提高开发者在开源项目中的工作效率和效果:文化、流程和工具。为了适应开源模式,您需要针对这些类别中的几个关键要素进行改进。 ![](/img/guides/improve-open-source-dev-impact1.png) -### Challenges open source dedicated teams face in an enterprise setting -#### Culture +### 企业环境中开源团队面临的挑战 + +#### 文化挑战 -Cultural challenges often stem from the fact that there is a gap between traditional software development practices and the requirements of open source development. You can bridge this gap by hiring open source experts and having them train other groups that aren’t familiar with the open source development model. +文化上的挑战往往源于传统软件开发与开源开发之间的差异。为了缩小这一差距,企业可以聘请具有开源开发经验的专业人士,并让他们培训那些不熟悉开源开发模式的团队。 -> “We aim to also provide open source engineers with adequate time to fulfill upstream responsibilities so they can provide adequate open source leadership for Samsung.” – Ibrahim Haddad, Vice President of R&D and Head of the Open Source Group at Samsung Research America. +> “我们的目标还包括为开源工程师提供充分的时间,以履行他们对上游项目的责任,从而为三星提供充足的开源领导力。” —— Ibrahim Haddad,三星研究美国公司研发副总裁兼开源团队负责人。 -#### Processes +#### 开发流程 -Open source development is dynamic, moves very quickly, and has special requirements for compliance. Companies that don’t adapt their internal processes to meet this type of development can easily get left behind. Developers need to be enabled to contribute code upstream quickly and any internal code policies need to be modified to allow this. +开源开发具有动态性,发展迅速,并且在合规方面有着特殊要求。如果企业不调整内部流程以适应这种开发方式,很容易落后。开发者需要能够迅速向上游贡献代码,因此内部代码政策也需要相应地进行修改。 -First, it’s vital to have a team in charge of maintaining proper open source compliance to avoid legal problems. (See our ebook, [Open Source Compliance in the Enterprise](https://www.linuxfoundation.org/publications/open-source-compliance-enterprise/).) +首先,建立一个负责维护开源合规性的团队至关重要,这样可以避免潜在的法律问题。(详情请参阅我们的电子书,[企业中的开源合规性](https://www.linuxfoundation.org/publications/open-source-compliance-enterprise/)。) -You’ll also need to have a simple internal approval model for open source use and contributions. Throughout the years, Samsung has moved from highly complex and cumbersome policies to a more simple approach for receiving, reviewing, and approving source code contributions. It’s a function of balance between all parties involved: legal, engineering, and open source. The compromise we have now supports the dedicated open source team which has a blanket approval to contribute to a number of open source projects. This is not the case for other teams who need to get different levels of approval depending on the nature of the code being contributed (e.g. simple bug fixes, code to improve existing functionality, code that offers new functionality, or starting a new project). +您还需要建立一个简单的内部审批流程,用于开源的使用和贡献。三星在多年的发展中,从复杂的政策转变为更简洁的方法来处理源代码的贡献、审查和批准。这是法律、工程和开源团队之间达成的一种平衡。目前我们达成的妥协支持了专门的开源团队,他们获得了对多个开源项目贡献的广泛批准。而其他团队则需要根据贡献代码的性质(如简单错误修复、改进现有功能、提供新功能或启动新项目)获得不同级别的批准。 -#### Tools +#### 开发工具 -You’ll also want to ensure your tools are compatible with the open source development model from the start. Create a setup that fulfills the needs of the open source program office and also meets corporate IT guidelines. +您需要确保您的工具从一开始就与开源开发模型兼容。创建一个既满足开源项目办公室的需求,又符合企业IT标准的设置。 -Samsung, for instance, issues Linux devices that work with all of the tools its engineers need to participate in open source development. This environment allows developers to join the team without requiring any major changes to the way they work. They also support work from home and in fact have only very few open source developers in their Silicon Valley offices – all other staff are remote across the globe. +例如,三星为其工程师提供了运行Linux的设备,这些设备支持他们参与开源开发所需的所有工具。这样的环境允许开发人员轻松加入团队,无需改变他们习惯的工作方式。三星还支持在家工作,事实上,他们在硅谷办公室只有少数开源开发者,其他员工都分布在全球各地,远程工作。 -## Top Recommended Practices +## 推荐的最佳实践 -First, a bit of history. December of 2000 marked a major milestone in the history of open source when IBM pledged to spend $1 billion on Linux R&D. IBM was a true pioneer in the enterprise world putting its bet on Linux and open source when very few companies did – and definitely not at that scale. IBM had to learn a lot about working with open source software and the various project communities they were involved in. +首先,让我们回顾一段历史。2000年12月,IBM承诺在Linux的研发上投入10亿美元,这一事件成为开源历史上的一个重要转折点。在当时,很少有公司会如此大规模地投资Linux和开源,IBM在企业界的这一举措无疑是一种创新。IBM因此不得不学习如何与开源软件及其社区合作。 -That was the starting point for enterprise open source and companies have since followed IBM by the dozens and then hundreds. Yet, thousands of companies are still entering open source as it is becoming the new normal of software development. The question is: How can we minimize the enterprise learning curve and speed up the process of “getting it right?” +这标志着企业开源的正式起步,自此之后,成百上千的公司纷纷效仿IBM的做法。如今,随着开源成为软件开发的新常态,越来越多的公司正在加入开源的行列。问题在于:我们如何帮助企业缩短学习曲线,更快地掌握开源的正确使用方式? -The answer is easy, but the application of that answer to specific company culture is the hard aspect. Let’s explore some of the “easy” aspects of learning from over 17+ years of enterprise experience with open source software. You’ll get to deal with the hard aspect of applying those lessons to your particular enterprise environment. +答案虽然简单,但将其应用到特定公司的文化中却颇具挑战。让我们探讨一些从超过17年的企业开源软件经验中学到的“简单”方面。您需要解决的是将这些经验应用到您企业特定环境中的难题。 -A word of caution: In addition to implementing these practices, you will need to lead a cultural shift from traditional software development practices to a more open and collaborative mindset. Internal company dynamics need to be favorable to open source efforts. As an open source leader inside your organization you will face several challenges in terms of funding resources, justifying ROI, getting upstream focus, etc. These often require a major shift in mindset and a lot of education up the chain. +请注意:除了实施这些实践之外,您还需要引导企业文化从传统软件开发转向更加开放和协作的心态。公司内部的动态必须支持开源工作。作为组织内的开源领导者,您可能会面临资金资源、证明投资回报率、获取上游关注等多方面的挑战。这通常需要心态上的重大转变,并在整个组织中推行大量的教育。 -### 1) Hire key developers and maintainers from the project’s community +### 1) 从项目社区招募关键开发者和维护者 -It takes considerable time to grow internal open source expertise. Hiring key developers is a critical step that allows your organization to quickly gain skills and recognition. +建立内部开源专业知识需要大量时间。聘请关键开发者是快速提升组织技能和获得认可的重要步骤。 -Two or three people are a great start towards making a noticeable impact in a large project such as the Linux kernel, attracting further hires, and allowing enough resources to mentor existing junior developers. (See our guide on [Recruiting Open Source Developers](https://www.linuxfoundation.org/recruiting-open-source-developers/).) +在大型项目(如Linux内核)中,两到三个关键人物可以产生显著影响,吸引更多人才加入,并为现有初级开发者提供足够的资源进行指导。(详情请参阅我们的指南,[招聘开源开发者](https://www.linuxfoundation.org/recruiting-open-source-developers/)。) -The goal is to find people who have enough peer recognition to be influential in the community. There are typically three pillars to this: domain expertise, open source methodology, and working practices. +我们的目标是找到在社区中具有一定影响力的人。这通常包括三个要素:领域专业知识、开源方法论和工作实践。 -You also need to align corporate interests with individual interests: it’s very hard to motivate a senior open source developer to work when their personal interests don’t meet with corporate interests in a given project. For example, a Linux memory management expert may not be interested in working on file systems, a corporate priority. Therefore, finding a match in interests is critical for a long lasting relationship. +您还需要确保公司利益与个人兴趣相一致:如果资深开源开发者的个人兴趣与公司在某个项目中的利益不符,那么激励他们工作将非常困难。例如,一个专注于Linux内存管理的专家可能对文件系统不感兴趣,而这恰恰是公司的重点。因此,找到双方兴趣相符的匹配对于建立长期的合作关系至关重要。 -### 2) Allocate Time for Upstream Contributions +### 2) 为上游贡献分配时间 -The core principle for hiring open source developers is to support your open source development and upstream activities. There is also the expectation that they should support product teams in their expertise areas. However, it’s not uncommon for product teams to exercise their influence in an attempt to hijack the time of the open source developers by having them work on product development as much as possible. If this happens, many open source developers will head to the door, seeking a new job that allows them to work on their upstream project before you realize what just happened. +雇佣开源开发者的核心原则是支持他们的开源开发和上游活动。同时,也期望他们能在专业领域内支持产品团队。然而,产品团队有时会试图占用开源开发者尽可能多的时间用于产品开发,这可能会导致开源开发者离职,转而寻找能让他们专注于上游项目的工作。 -Therefore, it’s important to create and maintain a separation of upstream work and product work. In other words, it’s recommended to provide your open source developers with guaranteed time to meet their upstream aspirations and responsibilities, especially if they are a maintainer. For junior developers or other internal developers who are using open source in product components, such interactions with the upstream community will increase their language, communication, and technical skills. In the absence of such an upstream time guarantee, it’s easy for these team members to be sucked into becoming an extension of product teams, resulting in their upstream focus drying up in favor of product development. +因此,明确区分上游工作和产品工作至关重要。建议为开源开发者提供固定的时间,以满足他们的上游目标和责任,尤其是对于那些担任维护者角色的开发者。对于初级开发者或其他使用开源组件的内部开发者,与上游社区的互动将有助于提升他们的语言、沟通和技术技能。如果没有这样的时间保障,这些团队成员可能会被产品团队完全占用,从而忽视了上游工作的重点。 -You should also be the upstream partner for product teams; they often feel like they’re living inside a pressure cooker, especially in a consumer electronics environment. They often seem understaffed, lack critical resources to support parallel upstream development, and are under constant pressure for feature delivery within tight schedules. In such an environment, it’s very easy to overlook the benefit of upstreaming in favor of short-term time savings that can unfortunately lead to technical debt that has a higher cost in the long term. Open source teams can help by being a partner that focuses on delivering important code upstream, reducing this technical debt. +作为产品团队的上游合作伙伴,你需要在消费电子领域这个高压环境中为他们提供支持。他们通常面临人员不足、关键资源缺乏的问题,且需要在紧迫的截止日期前完成功能开发。在这种情况下,他们可能会为了节省短期时间而忽视将代码贡献到上游的重要性,这反而可能导致长期的技术债务增加。开源团队可以通过专注于将关键代码贡献到上游,帮助减少这种技术债务。 -Encourage developers outside the open source team to learn from and contribute to the open source community. We provide as much help as we can with upstream code contributions, but our resources are limited, and we don’t always have the deep understanding of products that might be needed to adequately identify where code can be upstreamed. Better involvement in the open source community from teams outside our own allows us to get more important code upstream, and improves our ability to interact with the community. +同时,鼓励非开源团队的开发者学习和参与开源社区。尽管我们尽可能在上游代码贡献上提供帮助,但我们的资源有限,且对产品的深入了解可能不足,这限制了我们在识别可上游化代码方面的能力。非开源团队的更多参与将有助于我们将更多重要代码贡献到上游,并提升我们与社区的互动能力。 -### 3) Create a Mentorship Program +### 3) 创建导师计划 -Grow open source talent in specific technology areas relevant to your products. It’s easy to hire a few resources from outside the company, but there are several limitations to this approach. +在产品相关的关键技术领域培养开源人才。虽然从外部招聘相对容易,但这并非长久之计。 -The alternative approach is to convert your existing developers into open source contributors via training on the technical domain and open source methodology. These developers can then be paired with a mentor to further expand their skills. +更有效的方法是通过技术培训和开源方法论,将现有开发者转变为开源贡献者。之后,可以安排他们与经验丰富的导师一起工作,以进一步提升技能。 -Set up a mentorship program where senior, experienced open source developers provide mentorship to junior, less experienced developers. Typically, the mentorship program would run for 3 to 6 months; during this time, the mentor should supervise the work of the mentee, assign tasks, and ensure proper results. The mentor would also do code reviews for anything the mentee produces, and provide feedback before the mentee pushes the code to the upstream project. +建立导师计划,让资深开源开发者指导经验较少的开发者。导师计划通常持续3到6个月,期间导师将监督学员的工作,分配任务,并确保成果达标。导师还需对学员编写的代码进行审查,并在代码提交到上游项目前提供反馈。 -The goal is to increase the number of developers the company has contributing code to the upstream project, and to improve individual effectiveness by increasing the quality of code and the percentage of code that is accepted into the upstream project. Generally speaking, no more than 4-5 mentees should be assigned to a given mentor, and ideally they should work in the same area as the mentor to make code reviews more efficient. +目标是增加公司向开源项目贡献代码的开发者数量,并通过提升代码质量和接受率来增强个人贡献的效率。通常,每位导师指导的学员不应超过4到5名,且最好在相同技术领域工作,以便更高效地进行代码审查。 -### 4) Formalize an Open Source Career Path +### 4) 设立开源职业发展路径 -Create an open source developer track in your human resources (HR) system so people hired as open source developers, or those building their open source skills, have a good sense of how their career will progress within the company. Additionally, you should adjust performance-based bonuses to include goals related to open source development work. The metrics by which the performance of proprietary or closed source developers are measured are often different than those of open source developers. +在人力资源系统中为开源开发者设立专门的职业轨道,让新招聘的开源开发者或正在提升开源技能的员工能够清楚地看到在公司内的职业发展路径。同时,应调整绩效奖金制度,将开源开发工作的目标纳入其中。开源开发者的绩效评估标准与专有或闭源开发者通常有所不同。 -At some companies, there is a clear distinction between open source and non-open source developers. But in many companies the line is much more fluid, depending on its organizational structure and open source strategy. In reality, all modern developers have to work with open source. There are no closed source developers. Rather, there are times their code stays inside the company and times their code is published (contributed to a third party, or published as a new project). Your HR track and incentives should reflect your organization’s unique structure and approach to open source. +在某些公司中,开源开发者与非开源开发者之间有明确的界限。但在许多公司,这一界限更加灵活,取决于公司的组织结构和开源战略。实际上,所有现代开发者都需要与开源打交道。所谓的“闭源开发者”并不存在,因为他们的代码有时会在公司内部保留,有时则会公开发布(贡献给第三方或作为新项目发布)。公司的人力资源职业轨道和激励措施应反映公司独特的组织结构和开源策略。 -Finally, allow a flexible work from home policy for open source developers, regardless of the general corporate policy related to this. Lately, we have witnessed a reverse in work from home policies across companies where many have either banned or created strict limitations to working from home. In the open source world, a work from home policy is almost mandatory because open source experts are located all over the planet, and this policy is often the only way to hire them. +最后,为开源开发者制定灵活的在家工作政策,不受公司整体远程工作政策的限制。近期,许多公司的远程工作政策出现了倒退,要么禁止,要么严格限制在家工作。然而,在开源领域,允许在家工作几乎是必须的,因为开源专家遍布全球,这是雇佣他们的关键条件。 -There are operational benefits to a flexible work policy as well. Offering remote work options reduced employee turnover, and “job attrition rates fell by over 50 percent,” according to a [study published by Stanford University](https://people.stanford.edu/nbloom/sites/default/files/wfh.pdf ). And a [study by PGI](https://remote.co/10-stats-about-remote-work/), a leading provider of software services, found that 80 percent of workers reported higher morale when working from home, while 69 percent reported lower absenteeism. +灵活的工作政策还有助于提升运营效率。提供远程工作选择可以显著降低员工流失率。斯坦福大学的一项研究显示,远程工作使离职率下降了超过50% ([斯坦福大学的研究](https://people.stanford.edu/nbloom/sites/default/files/wfh.pdf))。而软件服务提供商PGI的研究发现,80%的员工认为在家工作提高了士气,69%的员工反映缺勤率下降([PGI的研究](https://remote.co/10-stats-about-remote-work/))。 -### 5) Offer Training -It’s impossible for any company to hire all the senior and most expert developers in a given domain. This concept applies to the Linux Kernel and any other prominent open source project. Therefore, you must have a way for your company to increase the competence of its developers in a given technical domain. In addition to technical training, you’ll also need training to teach the open source development model and the basic concepts of open source legal compliance. +### 5) 提供培训 -Sample training courses include: +没有任何公司能够聘请到特定领域所有的资深和顶尖开发者。这一原则适用于Linux内核和其他所有著名的开源项目。因此,公司需要找到方法来提升开发者在特定技术领域的能力。除了技术培训,还需要教授开源开发模式和开源法律合规基础知识的培训。 -* Technical training that covers the various areas in the Linux Kernel. Maintainers or senior developers usually present this to grow internal Kernel expertise; this expertise is vital to pass on given how challenging it is to hire expert Kernel developers. -* Open source development methodology course that teaches staff that’s new to open source how open source and Linux Kernel development works and how to best get engaged. -* Open source compliance course that teaches staff the basics of compliance principles and open source licensing. This should also be used to inform them of your company’s policy and process. (The Linux Foundation offers a free online open source compliance training for developers. The course is available [here](https://training.linuxfoundation.org/linux-courses/open-source-compliance-courses/compliance-basics-for-developers).) +示例培训课程包括: -### 6) Participate in Open Source Events +* 技术培训,涉及Linux内核的多个方面。通常由内核维护者或资深开发者主讲,以提升内部内核开发能力;这对于难以招聘到的内核专家至关重要。 +* 开源开发方法论课程,向开源新手介绍开源和Linux内核开发的工作方式,以及如何有效地参与。 +* 开源合规课程,向员工传授合规原则和开源许可的基础知识。此外,还应借此课程介绍公司的政策和流程。(Linux基金会提供免费的在线开源合规培训课程,开发者可以在[这里](https://training.linuxfoundation.org/linux-courses/open-source-compliance-courses/compliance-basics-for-developers)参加。) -Support your developers to attend and participate in open source conferences and events, including local community meetups, hackathons, and summits. Such participations help them connect at a personal level with their peers, build relationships, have face to face social interactions, and participate in technical discussions that guide the project direction. +### 6) 参与开源活动 -If your developers have work that others might be interested in, help these developers prepare content to present. Finally, you can also sponsor events, both big and small, to increase external visibility within the project’s community. These events are also a great venue to look for talent! +鼓励开发者参加开源会议和活动,包括本地社区聚会、黑客松和峰会。这些活动能帮助他们与同行建立个人联系,发展关系,进行面对面交流,并参与决定项目方向的技术讨论。 -### 7) Provide a Flexible IT Infrastructure +如果开发者的工作可能引起他人兴趣,帮助他们准备展示内容。此外,赞助各种规模的活动可提高项目社区内的外部能见度。这些活动也是挖掘人才的绝佳机会! -Provide a flexible IT infrastructure that allows open source developers to communicate and work with the open source and Linux kernel community without any challenges. Additionally, set up internal IT infrastructure that matches the tools used externally to help bridge the gap between internal teams and the kernel community or any other open source project community for that purpose. Much of this infrastructure will naturally evolve with your organization’s open source culture, but it’s important to be aware of the necessity and plan for its implementation +### 7) 提供灵活的IT基础设施 -There are three primary domains of IT services that are used in open source development: knowledge sharing (wikis, collaborative editing platforms, and public websites), communication and problem solving (mailing lists, forums, and real-time chat), and code development and distribution (code repositories and bug tracking). Some or all of these tools will need to be made available internally to properly support open source development. There is a chance this might conflict with existing company-wide IT policies. If so, it’s vital to resolve these conflicts and allow open source developers to use the tools they are familiar with. +建立灵活的IT基础设施,以便开源开发者能够轻松地与开源和Linux内核社区进行沟通和工作。同时,确保内部IT工具与外部工具兼容,以促进内部团队与内核社区或其他开源项目社区之间的交流。随着组织开源文化的不断发展,这种基础设施将自然演变,但关键是要认识到其重要性并制定实施计划。 -These open source practices typically require an IT infrastructure that is free from many standard, limiting IT policies. +在开源开发中,主要使用三种IT服务领域:知识共享(包括维基、协作编辑平台和公共网站),沟通与问题解决(如邮件列表、论坛和实时聊天),以及代码开发与分发(涉及代码仓库和错误跟踪)。为了有效支持开源开发,这些工具中的某些或全部可能需要在内部提供。这种做法可能会与公司的现有IT政策发生冲突。如果确实存在冲突,必须解决这些问题,并允许开源开发者使用他们熟悉的工具。 -> “It took us years of constant discussion and negotiation to break from the traditional IT setup into a more flexible environment that supports our open source development. We made it work for us and with enough persistence you also can make it work for your open source team.” – Ibrahim Haddad, Vice President of R&D and Head of the Open Source Group at Samsung Research America. +开源实践通常需要一个不受许多标准IT政策限制的灵活IT基础设施。 -### 8) Track Developer Code Contributions +> “我们花了数年时间不断讨论和谈判,才摆脱传统的IT设置,转变为一个更灵活的环境来支持我们的开源开发。我们做到了,只要坚持不懈,你也可以为你的开源团队打造一个高效的工作环境。” —— Ibrahim Haddad,三星研究美国公司研发副总裁兼开源团队负责人。 -Create an internal system to keep track of developer contributions and impact. Contributions can include upstream development, supporting product teams, knowledge transfer (mentoring, training), visibility (publications, talks), launching new open source projects, and establishing internal collaboration projects with other teams or groups. -There are several toolkits that help track source code contributions; for instance, The Linux Foundation uses a tool called gitdm, which produces the data reported in the Linux Foundation yearly Linux Kernel report. This can be used to track both individual developers as well as the overall team performance. Individual developers can be tracked for the number of patches they submit, the patch acceptance rate (patches submitted divided by patches accepted), and the type of patch (e.g. if it is a new feature, enhancement of existing functionality, bug fix, documentation, etc.). +### 8) 跟踪开发者代码贡献 -Other tools like [GrimoireLab](http://grimoirelab.github.io/) can also be used to chart and visualize the metrics you want to track. See the next section on metrics for specific examples of what you should track. +建立一个内部系统来记录开发者的贡献及其影响。这些贡献可能包括上游开发、支持产品团队、知识传递(如指导、培训)、提升知名度(如出版、演讲)、启动新的开源项目,以及与其他团队或小组建立内部协作项目。 -### 9) Identify Focus Areas with Broad Impact +存在多种工具可以帮助跟踪代码贡献;例如,Linux基金会使用名为gitdm的工具,用于生成Linux基金会年度Linux内核报告中的数据。这可以用来追踪个人开发者以及团队的整体表现。个人开发者可以通过他们提交的补丁数量、补丁接受率(提交的补丁数除以接受的补丁数)以及补丁类型(例如新功能、现有功能的增强、错误修复、文档等)来进行追踪。 -Contribute to and focus on areas that benefit more than one business unit or more than one product. This allows you to provide value and show ROI across multiple business units and increases your chances for more funding and support. +其他工具,如[GrimoireLab](http://grimoirelab.github.io/),也可以用来绘制和可视化你想要追踪的指标。请参阅下一部分关于指标的内容,了解应该追踪的具体示例。 -Focus your contributions on upstream projects that would directly benefit the company’s strategy and products. In open source development, it’s very easy to get carried away hopping between different interesting projects. In an enterprise setting where the open source group is considered a cost center, your driving force should be to focus on open source projects that support product development. +### 9) 确定具有广泛影响的重点领域 -Samsung does a yearly review of its product portfolio in an effort be involved in open source projects that are commonly used across as many products as possible. This list is then prioritized based on several factors, and they focus their efforts on the top projects. A methodology that drives your priorities is a great way to stick to what’s important, justifiable, and fundable. +专注于并贡献于对多个业务单元或多个产品都有益的领域。这有助于你在多个业务单元中提供价值并展示投资回报率,从而增加获得更多资金和支持的机会。 -### 10) Foster Internal Collaboration +将您的贡献集中在那些能直接促进公司战略和产品发展的上游项目上。在开源开发领域,人们很容易频繁切换不同的有趣项目。但在将开源团队视为成本支出部门的企业环境中,您应当专注于那些支持产品开发的开源项目。 -Collaborate with other business units that use the same open source projects in their products. These collaborations can take one or more of many forms: +三星每年都会审查其产品组合,以参与尽可能多的产品中常用的开源项目。然后,根据多种因素对这些项目进行优先排序,他们将主要精力集中在排名靠前的项目上。确立一种驱动优先事项的方法,有助于您专注于那些重要、有说服力且能得到资助的事务。 -* Deliver training to their developers -* Run a workshop on a specific topic or problem -* Develop new functionality -* Troubleshoot and resolve issues and bugs -* Upstream existing code for which they have no resources to do -* Help get them off an old fork and onto a mainline version -* And more +### 10) 加强内部协作 -The goal of these collaborations is to help the product teams understand their needs and fulfill their product goals via open source enablement. +与使用相同开源项目的其他部门展开合作。合作可以包括以下一种或多种形式: -Your company must share information and priorities across different divisions. To illustrate this, assume you are in an open source team and you are requested to support the implementation of a driver, but you are unable to get access to the hardware manual and instructions. This sounds a bit like playing darts with the lights off, and it is. Information sharing is a critical component to successful internal collaborations between the open source teams and everyone else. +- 为其开发人员提供培训 +- 举办针对特定主题或问题的研讨会 +- 开发新功能 +- 排查并解决故障和问题 +- 将他们无力维护的现有代码贡献到上游 +- 帮助他们从旧分支迁移到主线版本 +- 等等 -Sidebar: Open source at Samsung +这些合作旨在帮助产品团队理解自身需求,并通过开源支持来实现他们的产品目标。 -Samsung’s Open Source Group (OSG) was established in February 2013 to support two primary functions: the first is to provide open source leadership within Samsung by helping other divisions in the company understand how to participate in and benefit from open source development. The second is to serve as Samsung’s representatives in the wider open source community. The mandate of the team is to focus on enhancing key open source projects and technologies via active contributions to them, and to be actively involved and engaged with various open source organizations and foundations. +公司必须在各部门之间共享信息和优先级。例如,假设您在开源团队中,被要求支持一个驱动的开发,却无法获取硬件手册和指令。这就像是在黑暗中射箭,非常困难。信息共享是开源团队与其他团队成功内部协作的关键。 -## Metrics for tracking progress +侧边栏:三星的开源战略 -Once you start implementing these open source best practices, you’ll need proper open source metrics to drive the desired development behavior. But the traditional metrics often used in product organizations don’t apply in the context of open source development. +三星于2013年2月成立了开源小组,主要承担两大职能:一是为公司内部提供开源领导力,协助各部门参与并受益于开源开发;二是作为三星在开源社区中的代表。该团队致力于通过积极参与和贡献,增强关键开源项目和技术的实力,并与多个开源组织和基金会保持紧密合作。 -For example, tracking the number of changesets or lines of code can be a good metric for open source development impact. But you may have multiple instances of desired functionality being implemented upstream because your open source developers lobby for support from the community. In this case, the number of changesets or lines of code doesn’t matter nearly as much as the technical leadership that team members provide to get code upstream and reduce the company’s downstream maintenance efforts. So the metrics you track should account for both activities. +## 跟踪进展的指标 -### Commits and lines of code over time +开始实施这些开源最佳实践后,您需要合适的数据指标来引导期望的开发行为。然而,在开源开发的背景下,产品组织中常用的传统指标可能并不适用。 -One of the most basic things to track is the number of commits and lines of code changed over a specific period of time, such as every week, month, or year. +例如,跟踪代码提交或代码行数可以作为衡量开源开发影响的一个指标。但是,如果您的开源开发人员在社区中推广和寻求支持,可能会在上游项目中实现多个所需功能的实例。在这种情况下,代码提交或代码行数的重要性远不如团队成员为将代码贡献到上游项目并提供技术领导力来得重要,这有助于减少公司在下游的维护工作量。因此,您跟踪的指标应该同时考虑这两类活动。 + +### 提交次数和代码行数随时间的变化 + +最基本需要跟踪的数据之一是提交次数和代码行数随时间的变化,例如每周、每月或每年的数据。 ![](/img/guides/improve-open-source-dev-impact2.png) -### The total commits and lines changed per project per week is a good place to start tracking metrics. +### 每周每个项目的总提交数和代码更改行数是跟踪指标的良好起点。 -With this data, you can compare contributions from various internal development teams to identify where source code contributions are coming from and help ensure that resources are allocated appropriately. +利用这些数据,您可以比较不同内部开发团队的贡献,了解代码贡献的来源,并确保资源得到合理分配。 -From here you can create charts that compare various internal teams for their cumulative contributions, percent of total contributions, and the amount of time it takes to get code committed upstream (see the following charts). +基于此,您可以创建图表来比较各团队的总贡献量、贡献占比,以及代码提交到上游所需的时间(见下表)。 ![](/img/guides/improve-open-source-dev-impact3.png) -**Figure 2: Cumulative contributions over time can be tracked to compare internal teams and identify teams that are increasing their involvement in a particular open source community (in this chart, it’s the Linux kernel).** +**图2:通过追踪不同时间段内的累积贡献,可以比较各内部团队的表现,并找出那些在特定开源社区(如本图表所示的Linux内核社区)参与度不断提升的团队。** ![](/img/guides/improve-open-source-dev-impact4.png) -**Figure 3: Displaying your company’s contributions as a percent of total over time allows you to identify the teams that contribute the most code.** +**图3:将您公司的贡献显示为随时间变化的百分比,可以让您识别出贡献最多代码的团队。.** ![](/img/guides/improve-open-source-dev-impact5.png) -**Figure 4: The amount of time it takes to commit code upstream can be valuable for tracking your development efficiency. This table and chart shows how quickly various teams are getting their code contributed upstream and compares it to the community as a whole.** +**图4:将代码合并到上游主分支所需的时间对于监控开发效率很有帮助。这个表格和图表展示了不同团队如何迅速地将代码合并到主分支,并将其与整个社区的速度进行了对比。** -You can also use these metrics to compare your performance to other companies who are involved in the Kernel ecosystem for instance (Figure 5). This competitive analysis helps you be better informed about the overall developer ecosystem for the project. +你还可以利用这些指标来与其他参与Linux内核开发的公司的表现进行比较,例如(图5)。这种竞争分析有助于你更全面地了解该项目开发者社区的整体情况。 ![](/img/guides/improve-open-source-dev-impact6.png) -**Figure 5: Cumulative contributions can be sorted by company to see how your company stacks up against others.** +**图5:按公司对累积贡献进行排序,可以查看你的公司与其它公司相比的情况。** -These metrics provide a much better idea of where your strengths and weaknesses are and can help inform your overall development strategy. Tracking your own contributions relative to competitors’, for example, provides valuable information that helps an organization position its products relative to competitors’ in the marketplace. +这些指标能更准确地揭示你的优势和劣势,并有助于指导你的整体开发策略。例如,监控你与竞争对手的贡献对比,提供了宝贵的信息,帮助公司在市场上与竞争对手的产品进行有效定位。 ![](/img/guides/improve-open-source-dev-impact7.png) -**Figure 7: Projects may publish contribution data independently as well. For example, you can also track contributors to the Linux kernel via The Linux Foundation’s Linux Kernel Development Report and LWN.** +**图7:项目也可能单独公布其贡献数据。例如,你可以通过Linux基金会的年度内核开发报告和LWN网站来追踪Linux内核的贡献者。** + +Linux内核对三星具有战略重要性,因此公司决定将开发重心放在Linux内核上,同时参与其他众多项目。他们现在经常是Linux内核贡献量排名前五的公司之一。此外,该公司也在其他几个对其产品开发至关重要的开源项目上取得了类似的进展。 -The Linux kernel is of strategic importance to Samsung so the company chose to focus its development efforts there, among many other projects. They are now regularly among the top 5 contributors to the Linux Kernel by changesets. And the company is achieving the same progress with several other open source projects it deemed critical to the development of its products. +成为顶级贡献者并非最终目标,而是表明该组织的开发成果得到了其参与社区的认可。俗话说,你可以作为开源影响者坐在桌边,或者成为菜单上的选项。 -Being a top contributor isn’t a goal, in and of itself, but rather an indication that the organization’s development efforts are being accepted by the communities in which it participates. As the saying goes, you can either sit at the table as an open source influencer, or be on the menu. +> “成为被动的一方意味着你得在自己的办公室里为不得不维护大量无法合并到主分支的代码而苦恼。我们宁愿坐在桌边,参与决策。” —— Ibrahim Haddad,三星美国研究院研发副总裁兼开源小组负责人。 -> “Being on the menu means sitting and crying in your office about how you need to maintain a ton of code out-of-tree because you can’t merge with upstream. We’d rather sit at the table.” – Ibrahim Haddad, Vice President of R&D and Head of the Open Source Group at Samsung Research America. +## 结语 -## Final words +有效的开源开发不是可以轻易获得的,它需要通过不断的努力和贡献来赢得。 -Effective open source development can’t be given, it must be earned. This leadership is earned through regular, ongoing participation and contribution. +通过遵循开源领域的先驱公司所制定的最佳实践,你可以迅速提升内部的开源专业能力。这样,你就可以利用这些专业能力来提升你的产品和服务质量,同时降低代码维护的成本。 -By following some of the open source best practices set out by the pioneering companies in open source, you can make fast progress toward developing the internal open source expertise you require. You can then leverage that expertise to improve your products and services while reducing code maintenance costs. +最后,祝大家编程愉快! Happy hacking! -## References +## 参考资料 -* Samsung Open Source Group +* 三星开源团队 * [https://blogs.s-osg.org/](https://blogs.s-osg.org/) -* **GrimoireLab** – An open source software development and community analytics platform.  +* **GrimoireLab** – 一个用于开源软件开发和社区分析的开源平台。 * [https://grimoirelab.github.io/](https://grimoirelab.github.io/) -* **Compliance Basics for Developers** – A free online training course offered by The Linux Foundation. +* **开发者合规入门** – Linux基金会提供的一个免费在线培训课程,旨在帮助开发者了解合规基础知识。 * [https://training.linuxfoundation.org/](https://training.linuxfoundation.org/) -* **gitdm** – The “git data miner” is a tool created by Jonathan Corbet (LWN.net) and Greg Kroah-Hartman (Linux Kernel Maintainer and Fellow at the Linux Foundation) to track Linux kernel patches. +* **gitdm** – “git数据挖掘器”,由Jonathan Corbet(LWN.net)和Greg Kroah-Hartman(Linux内核维护者和Linux基金会的会员)开发,用于追踪Linux内核的补丁贡献情况。 * [git://git.lwn.net/gitdm.git](git://git.lwn.net/gitdm.git) -* **Facade** – A tool for monitoring who is contributing code to git repositories. It was authored by Brian Warner (Manager of Engineering and Strategy for Samsung’s OSG). +* **Facade** – 一个监控git仓库代码贡献者的工具,由Brian Warner(三星开源团队工程和战略经理)开发。 * [https://github.com/brianwarner/facade](https://github.com/brianwarner/facade) -## Acknowledgments +## 致谢 -This was a collaborative effort spearheaded by Ibrahim Haddad (Ph.D.) who is Vice President of R&D and the Head of the Open Source Group at Samsung Research America. We would like to express his sincere gratitude to Ben Lloyd Pearson (Operations and Strategy, Samsung Open Source Group for the continuous support, reviews and edits (following the open source model) that shaped this article and helped get it to the finish line. Big thanks also goes to Brian Warner (Manager of Open Source Engineering and Strategy, Samsung Open Source Group) and Gil Yehuda (Open Source at Oath) for their review and feedback. +本文是在Ibrahim Haddad博士的带领下共同完成的,他是三星研究美国公司的研发副总裁兼开源小组负责人。我们要特别感谢Ben Lloyd Pearson(三星开源小组运营与战略)的持续支持、审阅和编辑,正是他的开源模式工作使得本文得以成型并最终完成。同时,我们也要向Brian Warner(三星开源小组开源工程与战略经理)和Gil Yehuda(Oath的开源专家)表示深深的感谢,他们的审阅和反馈对本文至关重要。 diff --git a/content/zh-CN/guides/management-tools.md b/content/zh-CN/guides/management-tools.md index 6c83a8df..081beb6b 100644 --- a/content/zh-CN/guides/management-tools.md +++ b/content/zh-CN/guides/management-tools.md @@ -1,264 +1,279 @@ --- -title: Tools for managing open source programs +title: 管理开源项目的工具 --- -The road to strategic use of open source starts with a carefully planned, organized, and empowered open source program office to guide and manage its creation, distribution, and use. But, that’s just a first step. To get such an office underway and running smoothly, you need the right tools. These mission-critical tools will be used to track goals and metrics in departments from engineering and legal to executive leadership, PR and marketing to HR, and give each of these functions all the resources they need to gather data, provide snapshots of performance, and manage the daily use of open source within your company. +开源项目工具的战略应用之路始于一个精心策划、组织有序、有实权的开源项目办公室,用以指导和管理其创建、分发和使用(开源项目)。但这只是第一步。要让这样的办公室运转顺畅,你需要正确的工具。这些至关重要的工具将用于跟踪目标和指标,涉及从工程和法务到执行领导、公关和市场营销,再到人力资源等部门,并为每个功能提供所需的所有资源,以收集数据、提供绩效快照,并管理公司内部对开源的日常使用 -This guide provides details and scenarios for how to get your open source tool collection started, including information about the most important tools to use to track and manage your open source projects. Many of the tools have been created and open-sourced by The Linux Foundation and other leaders in the field, providing free and easy access for your projects. You’ll also find an example dashboard setup, which combines information from multiple tools for central review. +本指南提供了关于如何开始构建您的开源工具集的详细信息和场景,包括了解用于跟踪和管理您的开源项目的最重要工具的信息。许多工具是由Linux基金会和其他行业领先者创建并开源的,为您的项目提供了免费和便捷的访问。您还将找到一个示例仪表板设置,该设置将来自多个工具的信息汇总进行集中审查。 **Table of Contents** -- [Why you need special tools for open source program management](#why-you-need-special-tools-for-open-source-program-management) -- [How to select and plan your tools](#how-to-select-and-plan-your-tools) -- [Elements of a basic toolset](#elements-of-a-basic-toolset) -- [Tools for managing source code](#tools-for-managing-source-code) -- [Tools for tracking project health](#tools-for-tracking-project-health) -- [Tools for communications and collaboration](#tools-for-communications-and-collaboration) -- [Tools for corporate-scale GitHub management](#tools-for-corporate-scale-github-management) -- [Final words](#final-words) +- [为什么您需要特殊的工具来管理开源项目](#为什么您需要特殊的工具来管理开源项目) +- [如何选择和规划您的工具](#如何选择和规划您的工具) + - [利用现有工具](#利用现有工具) + - [创建仪表板](#创建仪表板) +- [基本工具集的要素](#基本工具集的要素) + - [自动化流程](#自动化流程) + - [管理关键任务](#管理关键任务) + - [源代码管理](#源代码管理) + - [许可合规性](#许可合规性) +- [管理源代码的工具](#管理源代码的工具) + - [错误和问题跟踪](#错误和问题跟踪) + - [归档和发布管理](#归档和发布管理) +- [项目健康跟踪工具](#项目健康跟踪工具) + - [为了更好的代码审查:](#为了更好的代码审查) + - [对于贡献者许可协议](#对于贡献者许可协议) + - [GitHub 在企业级上的管理](#github-在企业级上的管理) + - [项目质量](#项目质量) +- [沟通与协作工具](#沟通与协作工具) +- [企业级 GitHub 管理工具](#企业级-github-管理工具) +- [结束语](#结束语) +- [致谢](#致谢) -## Why you need special tools for open source program management +## 为什么您需要特殊的工具来管理开源项目 -Once your open source program office is up and running, it’s time to collect the right software tools that will allow your development teams to manage, track, guide, and advance their open source projects, consumption, contributions, and releases. +一旦您的开源项目办公室开始运作,就该收集合适的软件工具,让您的开发团队能够管理、跟踪、指导和推进他们的开源项目、消费、贡献和发布。 -These tools are critical because using open source for business strategy requires its own methodologies and processes which are very different than those needed when using and releasing proprietary software. Open source tools allow companies to do a myriad of tasks: +这些工具至关重要,因为将开源用于业务战略需要其自己的方法论和流程,这与使用和发布专有软件时所需的方法截然不同。开源工具使公司能够完成各种任务: -* Provide a workplace for collaboration and code building. -* Manage project health. -* Automate critical and repeatable tasks such as code review and tracking and license compliance. -* Generate data to prove ROI for your program office and open source strategy, in general. -* Oversee project quality and to make sure that guard rails are in place if issues arise. +* 提供协作和代码构建的工作场所。 +* 管理项目健康状态。 +* 自动化关键和可重复的任务,如代码审查、跟踪和许可证合规性。 +* 生成数据以证明您的项目办公室和开源战略的投资回报率。 +* 监督项目质量,并确保在出现问题时设置防护措施。 + +在开启您的开源之旅时拥有正确、针对性的工具也会让开发人员和其他员工的工作更轻松,为结果提供更好的洞察力,并成为公司开源项目成功合作和沟通的基础。 -Having the right, targeted tools as you begin your open source journey will also make jobs easier for developers and other employees, will provide better insight to results, and will become the basis for successful collaboration and communication of a company’s open source projects. +> “如果您有超过100个代码仓库或100名需要管理的人员,您真的不能再让人用电子表格手动管理了。虽然,人们仍然会这样做。但这开始变得临时和繁琐。这就是工具发挥作用的地方。它们让您能够扩展规模。” – [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源项目办公室主任 -> “If you have more than 100 code repositories or 100 people that you're trying to manage, you really can’t have someone doing it manually with spreadsheets anymore. Obviously, people still do it that way. But it starts to become ad hoc and laborious. That’s where tools come into play. They allow you to scale.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), Director of the Open Source Programs Office at Microsoft +## 如何选择和规划您的工具 -## How to select and plan your tools +公司对需要哪些开源工具的早期讨论大多取决于其业务、产品和服务以及它如何为客户和员工提供服务。随着其开源项目办公室制定规划过程和战略地图,工具可以被选择以整合公司的目标、流程和基础设施。 -Most of the early discussions about which open source tools are needed by a company will depend on its business, products, and services and how it serves its customers and employees. As the planning process and strategy map are developed by its open source program office, tools can be chosen to integrate the company’s goals, processes and infrastructure. +最终,了解您需要哪些工具的唯一方法是了解您想要通过开源做什么。 -Ultimately, the only way to know which tools you will need is to understand what you want to do with open source. +以下是为管理您的开源项目办公室选择所需工具的基本步骤: -Below are the basic steps for choosing the tools you’ll need for managing your open source program office: +1. 向开发人员和社区成员获取认可和选择偏好。为了实现这一目标,您需要与开发人员和社区成员进行详细讨论。他们可以描述哪些工具已经或可能最适合他们使用。认真对待这些建议和请求。倾听那些将带您达到目标的人的意见。他们很可能已经在使用许多这些工具了,所以要从他们的经验中受益。 +2. 了解业务关键应用程序所需的软件依赖关系和集成。这意味着了解和知道您的业务依赖哪些开源软件,以便您能够及时了解安全问题并确保软件的连续性。 +3. 研究现有工具,并决定您可以直接使用或根据需要进行构建的工具。不要为每个工具从头开始。看看您所在的开源社区中正在使用的工具,以及有关这些工具的建议和反馈。逗留于在线开发社区中,看看哪些工具有效,并寻求建议和意见。在开源会议上提问,在“兴趣小组”会议上与其他开发者交流,向已经在做您想做的事情的人学习。 -1. Get buy-in and selection preferences from developers and community members. To accomplish this, you’ll want to conduct detailed discussions with developers and community members. They can describe what tools have been or would work best for them. Take those recommendations and requests very seriously. Listen to the people who are going to get you to your goal. They have most likely been using many of these tools already, so benefit from their experiences. -2. Understand necessary software dependencies and integrations for business-critical applications. This means understanding and knowing which open source software your business depends on so you can stay up to date with security issues and ensure software continuity. -3. Research existing tools and decide what you can use as-is, or build out to suit your needs. Don’t start from scratch for every tool. See what is out there and being used in the open source communities you are in and get advice and feedback about those tools. Linger in online development communities to see what works and ask for recommendations and advice. Ask questions at open source conferences, talk to fellow developers in Birds-of-a-Feather sessions, and learn from others who are already doing what you want to do. +一旦选择了工具,就必须进行实施,这还需要几个额外的步骤: -Once selected, the tools must then be implemented, which requires several additional steps: +1. 创建内部基础设施以支持、管理和使用这些工具。通过您新成立的开源项目办公室,指定某人负责维护和构建内部基础设施,该基础设施将通过在线内部门户网站分发工具,并将其组织成任务和功能。在这个工具门户中,您可以将工具提供给所有开发人员,或通过根据他们的工作和要求的认证和权限来限制它们对特定用户的使用。 +2. 为将使用这些工具的员工提供培训计划。仅仅获取工具是不够的。现在,你必须确保你的开发人员知道如何使用这些工具,并且正在掌握它们的功能。在这个阶段,无论是在线培训、课堂教学还是小型午间小组设置的培训项目,都将对充分利用这些工具带来重要影响。询问你的开发人员哪种学习方法最适合他们,并让他们选择他们想要的学习方式。 +3. 确保这些工具在您的组织中得到中心化的展示。让开发人员能够轻松找到并使用它们,最好是集成到跟踪开发进度的任何现有开发者仪表板中。同样,内部工具门户将帮助您的公司组织和分发运营关键工具。 + +在选择工具时,考虑到实施也是有帮助的,因为这也可能影响您的决策。例如,一个学习曲线陡峭的工具可能需要更多的培训。 -1. Create an internal infrastructure to support, manage, and use the tools. Through your newly-formed open source program office, designate someone to maintain and build the internal infrastructure that will distribute the tools through an online internal portal where they are kept and organized into tasks and features. In this tool portal you can make the tools available to all developers or restrict them to specific users through authentications and permissions based on their jobs and requirements. -2. Provide training plans for employees who will use the tools. Just getting the tools isn’t enough. Now you have to be sure that your developers know how to use them and are mastering their capabilities. This is where training programs, whether online, in classrooms or in small lunchtime group settings, will be important to reap the benefits of their use. Ask your developers which learning methods work best for them and let them choose how they want to learn. -3. Ensure the tools are centrally visible in your organization. Make it easy for developers to find and use them, preferably integrated into any existing developer dashboards that track development progress. Again, this is where the internal tool portal is going to help your company organize and distribute the critical tools for your operations. +### 利用现有工具 -Implementation is helpful to keep in mind as you are choosing your tools, as this may also affect your decision. A tool with a steep learning curve, for example, may require more training. +一旦您对团队需要满足组织开源目标的工具有了清晰的想法,以及自身依赖和基础设施的可能限制,第一步就是探索并了解已经构建好并可供您使用的现有工具。由于大多数工具本身都是开源的,如果它们起初不符合您的确切需求,您的开发团队可以联系工具的构建者,看看他们是否可以合作并贡献,通过添加功能将工具引入新方向。 -### Leverage existing tools +具有讽刺意味的是,许多开源项目办公室并不总是重用其他人开发的工具,或与其他公司合作共同开发管理其开源项目所需的工具。他们通常想这样做,但许多企业,包括Facebook和微软,在真正成为讨论话题之前就已经拥有现有的工具套件。因为他们已经有了自己的工具集,并已经做出了这些投资,所以似乎对采用其他公司的工具的欲望较小。 -After you have a good idea of what your team needs to meet your organization’s open source goals and the possible limitations of your own dependencies and infrastructure, the first step is to explore and learn about existing tools that are ready-built and available for you today. Since most are open source tools themselves, if they don’t meet your exact needs at the start, your development teams can contact the builders of the tools to see if they can collaborate and contribute to take the tools in new directions by adding features. +这就是刚开始构建自己开源项目的公司具有显著优势的地方。由于他们现在正在建立自己的开源项目办公室并深入开源,他们不必受到这些限制的困扰。 -Ironically, many open source program offices don’t always reuse the tools developed by others, or collaborate with other companies to work on the tools they require to manage their open source programs. Often, they want to do that, but many businesses, including Facebook and Microsoft, already have existing tool suites which were in place before collaboration really became a discussion topic. Because they already have their tool sets and have made those investments, they seem to have less desire to adopt those of other companies. +相反,他们可以明智地利用他人的经验和成功,并使用近年来由领先的公司创建的经过验证的工具来构建他们的开源工具箱。Linux基金会的开源行业组织,[TODO Group](http://todogroup.org/)(开放谈论,开放开发),在本文档中收集了这些工具的列表。 -That’s where companies that are just starting to build out their own open source programs have a significant advantage. Since they are now establishing their own open source program offices and diving into open source, they don’t have to be bothered with such limitations. +### 创建仪表板 -Instead, they can wisely take advantage of the experiences and successes of others and build their open source toolboxes using the proven tools created by companies which led the way in recent years. The Linux Foundation’s open source industry organization, the [TODO Group](http://todogroup.org/) (Talk Openly Develop Openly), collects a list of these tools in this document. +除了合适的工具之外,公司还应该结合中央仪表板,允许他们实时监控和跟踪其开源项目和开发。许多公司可能已经有了这样的仪表板用于现有的开发工作和应用程序,并且可能将现有的仪表板与他们的开源工作集成起来。如果没有,他们应该创建或采用新的仪表板来改进他们的开源部署管理。 -### Create a dashboard +>“关于仪表板,有许多创建它们的方式,从公司想要如何显示与开发相关的信息的角度来看,这真的是一种艺术。有些人构建这些带有旋转仪表板的花哨屏幕,但关键是要有一个中心位置,最好与您现有的开发仪表板共同位置,人们可以前去了解更多关于开源项目健康状况、指标等信息。” – [Chris Aniszczyk](https://twitter.com/cra),云原生计算基金会COO。 -Along with the proper tools, companies should also incorporate central dashboards which allow them to monitor and track their open source projects and development in real time. Many companies likely have such dashboards for existing development work and applications and may be able to integrate the existing dashboards with their open source work. If not, they should create or adopt new dashboards to improve the management of their open source deployments. +## 基本工具集的要素 -> “On dashboards, there are many ways to create them, and it’s really an art in terms of how companies want to display development-related information. Some people build these fancy screens with rotating dashboards, but the key thing is to have a central location**, preferably co-located with your existing dev dashboards,** where people can go to learn more about open source project health, metrics, and so on.” – [Chris Aniszczyk](https://twitter.com/cra), COO of the Cloud Native Computing Foundation. +用于管理和报告开源项目的工具的丰富可用性可能会很快变得令人不知所措。如果您的开源项目刚刚起步,将研究重点放在您需要启动和运行的几个基本工具上将会有所帮助。 -## Elements of a basic toolset +然后,随着您的项目的发展和对这些工具的使用经验增加,您可以开始采用新的工具来帮助您根据需要自动化和简化流程。请记住,您希望选择的工具能够补充和支持您的内部文化和流程,而不是引导它们。 -The abundance of tools available for managing and reporting on open source projects can quickly become overwhelming. If your open source program is just getting started, it helps to focus your research on just a few of the basic tools that you’ll need to get up and running. +以下各节介绍了几乎所有开源项目日常使用的基本工具类别。这是组织您的研究的好方法。 -Then as your program grows and you’ve gained more experience using these tools, you can start to adopt new tools to help you automate and streamline your processes as the need arises. Remember that you want the tools you choose to complement and support your internal culture and processes – not lead them. +### 自动化流程 -The sections below give the basic categories of tools that pretty much all open source programs use on a daily basis. This is a good way to organize your research. +自动化流程的工具是您公司开源项目中最重要的选择和使用的工具之一。这些工具的任务范围广泛,包括自动化贡献者许可协议(CLA)的流程,CLA是一种法律文件,声明开发人员创建了代码并未非法从其他地方复制。传统上,这些协议是通过打印协议,然后签署并传真来手动完成的。但在电子邮件和即时通讯的世界中,这种做法现在已经过时了。相反,该过程可以通过请求电子签名并随后跟踪和处理提交的机器人来自动化。 -### Automate processes +其他自动化工具可以告诉您确切是谁在为您的项目做出贡献,并有助于消除程序摩擦,从而减慢随着项目规模变大而需要满足公司需求的进展速度。 -Tools which automate processes are among the most important you will select and use for your company’s open source program. The tasks for such tools are broad, including automating procedures for contributor license agreements (CLAs), which are legal documents stating that a developer created the code and didn’t copy it from anywhere else illegally. Traditionally these kinds of agreements were done manually by printing out the agreements and then signing and faxing them in to comply. But in a world of email and instant communications, that’s crazy today. Instead, the process can be automated using bots that request electronic signatures and then track and handle the submissions. +根据微软开源项目办公室的说法,该办公室管理着GitHub上的约8000个代码仓库,涉及约11000个贡献者,公司在2016年收到了约40000个内部请求,要求在项目中使用开源。为了管理这些请求以及创建的代码和正在更新的代码版本,公司转而使用可以自动化管理这些混乱现状的工具。由于代码可能在可能涉及数百个其他项目中使用,因此必须仔细跟踪,以便如果出现安全漏洞,可以迅速绘制出所有软件影响的范围并进行修复。在如此大规模的情况下,自动化是至关重要的,手动更新几乎是不可能的。 -Other automation tools can tell you who exactly is contributing to your projects and can help remove procedural friction which slows down progress in projects as they get larger and scale to meet the needs of companies. +![微软的Azure开源门户显示了一些有用的信息,比如GitHub上每日用户的数量。来源:https://www.jeff.wilcox.name/2015/11/azure-on-github/](/img/guides/tools-for-managing-open-source-programs1.png) -In Microsoft’s open source program office, where some 8,000 repositories are managed on GitHub involving some 11,000 contributors, about 40,000 internal requests came in to use open source in projects in 2016, according to the company. To manage those requests as well as the code that’s created and the code versions which are being updated,the company turns to tools which can automate the chaos. And because the code is likely being used in potentially hundreds of other projects, it must be tracked carefully so that if a security bug arises all software impacts can quickly be mapped out and fixed. At such a large scale, automation is critical and manual updates would be almost impossible. +### 管理关键任务 -![Microsoft’s Azure open source portal displays useful information such as the number of daily users on GitHub. Source: https://www.jeff.wilcox.name/2015/11/azure-on-github/](/img/guides/tools-for-managing-open-source-programs1.png) +另一种需要考虑和获取的重要工具是那些帮助管理关键任务的工具,例如项目管理、跟踪项目健康状况,并确保开发人员、开源社区和公司内部之间清晰快速的沟通。 -### Manage critical tasks +### 源代码管理 -Other important tools to be considered and acquired are those which help manage critical tasks, such as project management, tracking project health and ensuring clear and quick communications between developers, open source communities, and others inside a company. +大多数通过开源项目办公室开发的企业软件项目都使用 [GitHub](https://GitHub.com/about) 作为它们的集中式托管和开发平台。 -### Source code management +GitHub是一个在线源代码管理站点,允许开源开发人员将其代码管理和存储在一个中心的“仓库”或存储空间中,参与者可以在其中进行协作和共同构建代码。今天,有大约6400万个开源编码项目托管在GitHub上,涉及约2300万名开发人员。 -Most corporate software projects being developed through open source program offices use [GitHub](https://GitHub.com/about) as their centralized hosting and development platform. +GitHub用户可以添加代码,审查提交的代码,提出更改建议,获取和提供反馈,并使用该服务进行项目管理。GitHub使用 [Git版本控制系统](https://git-scm.com/),这是由Linux创始人Linus Torvalds开发的开源项目,为正在协作的代码和人员提供组织。每个“贡献者”都有自己的项目仓库副本,他们可以在自己的计算机上进行更改,然后将其提交回项目以供将来包含。然后,项目组织者会审查、讨论、修改并批准或拒绝该“拉取请求”(此处有示例)(https://GitHub.com/GitHub/opensource.guide/pull/402/files),或代码贡献。 -GitHub is an online source code management site that allows open source developers to manage and house their code in a central “repository” or storage space where participants can collaborate and build their code together. Some 64 million open source coding projects are hosted within GitHub today, involving some 23 million developers. +### 许可合规性 -GitHub users can add code, review submitted code, propose changes, get and offer feedback and provide project management using the service. GitHub uses the [Git Version Control System](https://git-scm.com/), the open source project developed by Linux creator Linus Torvalds which provides organization for the code and people who are collaborating on open source. Each “contributor” has their own copy of the project repository they are working on, where they can make changes on their own computer and then submit it back to the project for future inclusion. That “pull request,” ([example here](https://GitHub.com/GitHub/opensource.guide/pull/402/files)) or code contribution, is then reviewed, discussed, modified and approved or rejected by the project organizers. +代码扫描和合规性工具同样重要,它们有助于跟踪代码来源和许可要求。对于公司来说,监控引入其自身基础设施、产品和服务的开源代码以确保符合许可要求至关重要。 -### License compliance +例如,您的应用程序可能包含数千个开源组件。为了保护公司免受法律问题的困扰,了解这些细节至关重要。在高风险的情况下,用户必须深入代码以深入验证和确认许可证是否符合他们所说的内容,这取决于您的业务在风险光谱上的位置(请参阅我们关于使用和分发开源代码的指南)。 -Also important are code scanning and compliance tools, which help track code provenance and license requirements. It’s important for companies to watch over the open source code being brought into its own infrastructure, products, and services to ensure license requirements are met. +>“您必须了解您的风险概况,因为最终扫描的一切都是关于风险管理。您可以把头埋在沙子里,然后只是相信并希望自己没事。或者您可以说‘如果我被起诉,那将毁了我的生意。’您需要真正确定(风险所在)。所以,您打开软件包,然后查看所有代码行,并找到可能存在风险的所有内容。” – Jeff McAffer,微软开源项目办公室主任。 -Your applications, for example, could include several thousand open source components. To protect your company from legal issues it’s critical to know these details. In scenarios that are high risk, users must dive into the code to deeply validate and verify that the licenses are what they say they are, depending on where your business is on a risk spectrum. (See our guide on using and distributing open source code.) +## 管理源代码的工具 -> “You must understand your risk profile, because in the end scanning is all about risk management. You can stick your head in the sand at one end then just trust and hope that you are OK. Or you could say ‘If I get sued, it’s going to devastate my business.’ You need to really be sure. So, you crack open the package and you look through all the lines of code and you find everything that could possibly be in there.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), director of the Open Source Programs Office at Microsoft. +正如我们之前讨论过的,GitHub是当今大多数开源项目办公室的首选源代码管理系统。但仅仅依靠GitHub可能无法满足您的所有项目的代码管理需求——特别是在您扩大努力的规模时。 -## Tools for managing source code +一些用于开源世界的工具旨在通过添加它所缺少的功能来改进GitHub,例如支持检查开发者证书的工具,以确保代码可以在开源项目中合法许可和使用。 -As we discussed earlier GitHub is the go-to source code management system for most open source program offices these days. But GitHub alone won’t meet all your program’s code management needs – especially as you scale up your efforts. +在代码审查方面,GitHub也存在一些不足,因此有一些可用的工具可以自动将问题代码发送回创建者,并要求他们进行审查和进行必要的更改。GitHub没有强制某人审查其代码的方法,因此这些巧妙的工具将使工作流程更加顺畅。 -Some of the tools used in the world of open source are aimed at improving GitHub itself by adding features it lacks, such as support for checking Developer Certificate of Origin (DCO) statements to be sure that code can be legally licensed and used in an open source project. +其他针对GitHub的特定工具扩展了GitHub的性能指标功能,这些功能往往非常特定于项目,而不是提供整个组织的详细信息。对于维护多个开源代码仓库并跨多个GitHub项目进行的公司,需要更好的工具来组织和汇总它们以理解其中的意义。来自Amazon、Netflix和微软的各种工具可帮助处理这些任务。 -GitHub also has some deficiencies when it comes to code reviews, so there are available tools that can automatically send questionable code back to the contributors who created it and ask them to review and make needed changes. GitHub doesn’t have a way to force someone to review their code, so these clever tools make that happen to improve workflows. +以下是一些最流行和最有用的源代码管理工具,它们可以简化和帮助您的GitHub存在: -Other GitHub-specific tools expand on GitHub’s performance metrics capabilities, which tend to be very project specific rather than providing detailed information across whole organizations. For companies that maintain many open source code repositories across multiple GitHub projects, better tools are needed to organize and aggregate them to make sense of it all. A wide range of such tools are available from Amazon, Netflix, and Microsoft to help with those tasks. +**源代码扫描和许可证合规性** -Here are some of the most popular and useful source code management tools which can streamline and help your GitHub presence: +[Black Duck 软件组成分析](https://www.synopsys.com/software-integrity/security-testing/software-composition-analysis.html) – Synopsys 的 Black Duck 软件组成分析 (SCA) 帮助团队管理在应用程序和容器中使用开源和第三方代码所带来的安全、质量和许可证合规风险。 -**Source code scanning and license compliance** +[版权审查工具](https://wiki.debian.org/CopyrightReviewTools) – 这一套开源命令行工具帮助简化初始版权文件的结构以及后续的审查和更新。 -[Black Duck Software Composition Analysis](https://www.synopsys.com/software-integrity/security-testing/software-composition-analysis.html) – Black Duck software composition analysis (SCA) by Synopsys helps teams manage the security, quality, and license compliance risks that come from the use of open source and third-party code in applications and containers. +[FlexNet Code Insight](https://www.revenera.com/protect/products/flexnet-code-insight.html) – Revenera 提供的 FlexNet Code Insight 帮助开发人员、法律团队和安全人员自动化公司开源使用。 -[Copyright review tools](https://wiki.debian.org/CopyrightReviewTools) – This collection of open source command line tools help make initial copyright file construction and subsequent review and update easier. +[FOSSA](http://fossa.io/) – 这是一款商业工具,可在后台自动执行代码依赖跟踪和许可证合规扫描。 -[FlexNet Code Insight](https://www.revenera.com/protect/products/flexnet-code-insight.html) – Revenera offers FlexNet Code Insight to help automate corporate open source use among developers, legal teams and security staffers. +[FOSSID](https://fossid.com) - FOSSID 是一款用于许可证和漏洞扫描的商业工具。FOSSID 不依赖声明的组件和许可证,而是使用大型项目和代码片段数据库来扫描代码片段。这可以检测复制/粘贴的代码,或者那些未正确保留许可证声明的代码。特别是在审核从第三方收到的代码或准备开源最初仅供内部使用的代码时,这非常有用。 -[FOSSA](http://fossa.io/) – This is a commercial tool that automatically performs code dependency tracking, license compliance scanning in the background. +[FOSSology](https://www.fossology.org/) – 一个 Linux 基金会项目,FOSSology 是一个开源许可证合规软件工具包,可以从命令行运行许可证、版权和出口控制扫描。还提供了数据库和网页界面来创建合规工作流。 -[FOSSID](https://fossid.com) - FOSSID is a commercial tool for license and vulnerability scanning. Rather than relying upon declared components and licenses, FOSSID uses a large database of projects and code fragments to scan for code snippets. This enables detection of copied/pasted code, or code where license declarations were not properly preserved. In particular, this is useful when auditing code received from a third party or when preparing to open source code that was originally developed for internal use only. +![Linux 基金会的 FOSSology 合规工具](/img/guides/tools-for-managing-open-source-programs3.png) -[FOSSology](https://www.fossology.org/) – A Linux Foundation project, FOSSology is an open source license compliance software toolkit which can run license, copyright and export control scans from the command line. A database and web UI are also available to create compliance workflows. +[REUSE](https://reuse.software/) – 一个免费的软件工具,帮助在代码库中采用和检查许可证的应用。它基于最佳实践,包括 SPDX 规范。它提供一个徽章 API 服务来标记合规性。 -![The Linux Foundation’s FOSSology compliance tool](/img/guides/tools-for-managing-open-source-programs3.png) +[scancode-toolkit](https://github.com/nexB/scancode-toolkit) – 来自 nexB 的开源 ScanCode 工具套件,扫描代码中的许可证、版权和依赖项,以发现、探索和清点代码中使用的开源和第三方组件。 -[REUSE](https://reuse.software/) – A free software tool to help adopt and check the application of licenses in a code repository. It is based on best practices, including the SPDX specification. It offers a badge API service to market the compliance. +[SPDX](https://spdx.dev/) – 软件包数据交换 (SPDX) 规范是一种用于描述软件包的组件、许可证和版权的标准格式。SPDX 标准通过标准化开发者和公司之间共享许可证信息的方式来帮助遵守自由和开源软件许可证。SPDX 规范由 Linux 基金会主办的 SPDX 工作组开发。该小组提供开源[工具](https://spdx.dev/tools)来帮助使用 SPDX 文档的用户。 -[scancode-toolkit](https://github.com/nexB/scancode-toolkit) – From nexB, the open source ScanCode suite of utilities scans code for licenses, copyright and dependencies to find, discover and inventory open source and third-party components used in your code. +[Vigiles](https://timesys.com/solutions/vigiles-vulnerability-management/) – Vigiles 是一个商业软件组成分析 (SCA) 和 CVE 监控工具,优化用于嵌入式 Linux,并适用于所有开源软件。它提供了跟踪、分类、修复和记录影响设备的 CVE 的完整过程。 -[SPDX](https://spdx.dev/) – The Software Package Data Exchange (SPDX) specification is a standard format used to describe the components, licenses and copyrights associated with software packages. The SPDX standard aids compliance with free and open source software licenses by standardizing the way license information is shared between developers and companies. The SPDX specification is developed by the SPDX workgroup, which is hosted by The Linux Foundation. The group offers open source [tools](https://spdx.dev/tools) to help users of SPDX documents. +[WhiteSource](https://www.whitesourcesoftware.com/) – 提供许可、安全、代码质量和报告分析,通过自动和持续扫描数十个开源代码库来实时管理开源组件。 -[Vigiles](https://timesys.com/solutions/vigiles-vulnerability-management/) – Vigiles is a commercial Software Composition Analysis (SCA) and CVE monitoring tool optimized for embedded Linux and usable for all open source software. It gives you the complete process to track, triage, remediate, and document CVEs affecting your device. +### 错误和问题跟踪 -[WhiteSource](https://www.whitesourcesoftware.com/) – Provides licensing, security, code quality and reporting analysis for managing open source components in real-time by automatically and continuously scanning dozens of open source repositories on a commercial basis. +[Bugzilla](https://www.bugzilla.org/) – 开源、服务器端软件,具有高级查询工具,可以记住搜索结果,集成的电子邮件功能和全面的权限系统。Mozilla 将 Bugzilla 用作其错误跟踪系统。 -### Bug and issue tracking +[GitHub Issues](https://help.github.com/articles/about-issues/) – GitHub 自带的反馈和错误跟踪工具,GitHub Issues 是 GitHub 项目托管的一部分。 -[Bugzilla](https://www.bugzilla.org/) – Open source, server-based software featuring an advanced query tool that can remember searches, integrated email capabilities and a comprehensive permissions system. Bugzilla is used by [Mozilla](https://bugzilla.mozilla.org/) as its bug tracking system. +[GitLab](https://about.gitlab.com/) – 这个错误跟踪工具在单一用户界面中统一了问题跟踪、代码审查、Git 仓库管理、活动流、Wiki 等功能,以帮助您的开源项目。GitLab 可作为服务或商业软件使用。 -[GitHub Issues](https://help.github.com/articles/about-issues/) – GitHub’s own integrated feedback and bug tracker, GitHub Issues is available as part of GitHub’s project hosting. +[JIRA](https://www.atlassian.com/software/jira) – 来自 Atlassian 的 JIRA 包含自定义过滤器、开发者工具集成、可自定义的工作流和丰富的 API,以将 JIRA 与其他应用程序集成。JIRA 可作为商业软件使用。 -[GitLab](https://about.gitlab.com/) – This bug tracking tool unifies issue tracking, code review, Git repository management, activity streams, wikis and more in a single UI to assist your open source projects. GitLab is available as a service or as a commercial software. +### 归档和发布管理 -[JIRA](https://www.atlassian.com/software/jira) – From Atlassian, JIRA contains custom filters, developer tool integrations, customizable workflows and rich APIs to integrate JIRA with other applications. JIRA is available as a commercial software. +[Artifactory](https://www.jfrog.com/artifactory/) – Artifactory 是 JFrog 的一个仓库管理器,支持用任何编程语言创建的软件包。它与所有主要的 DevOps 和持续集成、持续部署工具集成。Artifactory 可作为商业或开源工具使用。 -### Archiving and release management +[Docker Hub](https://hub.docker.com/) – 一个基于云的注册服务,允许用户链接到代码仓库并构建和测试他们的镜像。Docker Hub 是一个集中资源,用于容器镜像的发现、分发和变更管理,以及开发管道中的协作和工作流自动化。 -[Artifactory](https://www.jfrog.com/artifactory/) – Artifactory is a repository manager from JFrog which supports software packages created in any code language. It integrates with all major DevOps and continuous integration and continuous deployment tools. Artifactory is available as a commercial or as an open source tool. +[github-release](https://github.com/github-release/github-release) – GitHub 的开源内置功能,让用户[打包和编辑项目的发布](https://help.github.com/articles/about-releases/),使其他社区成员可以使用这些项目。 -[Docker Hub](https://hub.docker.com/) – A cloud-based registry service which allows users to link to code repositories and build and test their images. Docker Hub is a centralized resource for container image discovery, distribution and change management, collaboration and workflow automation throughout the development pipeline. +## 项目健康跟踪工具 -[github-release](https://github.com/github-release/github-release) – The open source, built in functionality part of GitHub which lets users [package and edit releases](https://help.github.com/articles/about-releases/) of projects on GitHub so they are available for use by other community members. +随着开源项目的成长和成熟,监控和跟踪其整体健康状况是企业开源项目的核心任务。为了实现这一目标,您必须收集工具,报告个别开源项目在其社区中的表现和接受程度 - 通常涵盖数十、数百甚至数千个项目。这些工具还必须能够将数据整合成有意义、有用且可操作的信息,以便全面了解整个开源项目组合的综合表现。 -## Tools for tracking project health +![Amazon 的开源项目仪表板可用于一次查看和监视多个 GitHub 组织和/或用户。来源: https://github.com/amzn/oss-dashboard](/img/guides/tools-for-managing-open-source-programs4.png) -Monitoring and tracking the overall health of open source projects as they grow and mature is a core task for an enterprise open source program. To accomplish it, you must gather tools which report on how individual open source projects are performing and being received by their communities – often across dozens, hundreds or even thousands of projects at once. The tools also must be able to roll the data into meaningful, useful, and actionable information about overall project performance across your entire open source portfolio. +归根结底,重点在于你能从数据中获得的关键和有用的信息——而不是关于虚荣指标,比如详细说明一个项目记录了多少“关注者”星标,自项目启动以来有多少贡献者参与,或其他缺乏重要背景信息的指标。 -![Amazon’s Open Source Program Dashboard can be used to view and monitor many GitHub organizations and/or users at one time. Source: https://github.com/amzn/oss-dashboard](/img/guides/tools-for-managing-open-source-programs4.png) +最好的项目健康工具还必须帮助项目团队对支持他们努力的社区做出响应,并鼓励贡献开发人员的参与和多样性。这意味着工具帮助维护者快速回应社区成员发布的问题或反馈,以便他们保持热情参与,不会感到无聊而转移到其他项目。 -The bottom line here is it’s all about the critical and useful insights you can glean from the data – not about vanity metrics such as detailing how many “watcher” stars a project has logged, how many contributors have been part of the project since its start, or other metrics that lack important context. +一些开源社区可能会有大量的贡献者,而其他社区可能只有一小部分特定群体的社区成员。项目健康工具需要能够处理各种规模的项目。 -The best project health tools must also help the project teams be responsive to the communities which support their efforts and encourage engagement and diversity with contributing developers. That means the tools help maintainers quickly respond to questions or feedback posted by community members so they remain enthusiastically engaged and don’t get bored and move on to other projects. +> “关于现有的工具和系统,我的希望是,我们很快就会达到这样一个观点:公司的开源项目办公室不应该再需要自己创建任何工具或技术。他们应该能够找到并使用现有的开源工具,用于管理他们的开源项目。” - [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源项目办公室主任 -Some open source communities will have large groups of contributors, while others will have small niche groups of community members. The project health tools need to be able to work with projects of all sizes. +以下是一些最受欢迎和最有用的项目统计和项目健康跟踪工具: -> “Regarding existing tools and systems, my hope is that we're quickly getting to a point where a company’s open source program office should not need to create any tools or technologies on their own. They should be able to find and use existing open source tools which can be used to manage their open source programs.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), Director of the Open Source Programs Office at Microsoft +* [Gittagstats](https://github.com/mcharleb/gittagstats) – Gittagstats 是一个开源工具,用于从 Git 仓库的一组标签生成统计报告。该工具由高通公司创建。 -Here are some of the most popular and useful project statistics and project health tracking tools: +* [GrimoireLab](https://chaoss.github.io/grimoirelab/) – GrimoireLab 有各种开源工具,用于测量和可视化开源项目的统计数据,从 Git仓库、GitHub 拉取请求或 Bugzilla 票据到邮件列表、Meetup 群组或 Slack 频道。GrimoireLab 是 [CHAOSS](https://chaoss.community) 的一个项目,这是一个关于开源开发指标的协作组。 -* [Gittagstats](https://github.com/mcharleb/gittagstats) – Gittagstats is an open source tool which generates statistics reports from a set of tags for a Git repository. The tool was created by Qualcomm. -* [GrimoireLab](https://chaoss.github.io/grimoirelab/) – GrimoireLab has a variety of open source tools to measure open source project statistics and visualize them, from git repositories, GitHub pull requests or Bugzilla tickets to mailing lists, Meetup groups or Slack channels. GrimoireLab is a project in [CHAOSS](https://chaoss.community), a collaborative group on open source development metrics. -* [OSS Tracker](https://github.com/Netflix/osstracker) – OSS Tracker, from Netflix, collects data about a GitHub organization and aggregates it across all projects within that organization in a single user interface. All repositories are listed and metrics are combined for an organization, but community managers can also organize projects into functional areas and appoint administrators to assign management and engineering leads. +* [OSS Tracker](https://github.com/Netflix/osstracker) – 来自 Netflix 的 OSS Tracker 收集有关 GitHub 组织的数据,并将其汇总到该组织的所有项目中,以单一用户界面展示。所有仓库都列出来,指标被组合为一个组织,但社区管理员也可以将项目组织成功能区域,并指定管理员来分配管理和工程师的领导。 -> “The goal is to have the tools, along with transparent data and metrics-related information, which can be used to guide the organization.” – [Chris Aniszczyk](https://twitter.com/cra), COO of the Cloud Native Computing Foundation +> “目标是拥有工具,以及透明的数据和与指标相关的信息,可以用来指导组织。” - [Chris Aniszczyk](https://twitter.com/cra),云原生计算基金会首席运营官 -The TODO Group also offers a [helpful list that adds other tools](https://GitHub.com/todogroup/awesome-oss-mgmt) as well: +TODO Group 还提供了一个[有用的列表,添加了其他工具](https://GitHub.com/todogroup/awesome-oss-mgmt)。 -### For better code reviews: +### 为了更好的代码审查: -* [PullApprove](https://about.pullapprove.com/) – Brings more formalization to code contributions – or pull requests – by improving code quality through peer-review, enforcing style guidelines, catching errors and providing security checks on code. -* [sentinel](https://github.com/habitat-sh/sentinel) – A repository management bot which reviews and tests code contributions, builds a list of maintainers for the repository and communicates the status of a pull request with users. +* [PullApprove](https://about.pullapprove.com/) – 通过改进同行审查、强制样式指南、捕获错误并对代码进行安全检查,使代码贡献(或拉取请求)更加正式化,从而提高代码质量。 +* [sentinel](https://github.com/habitat-sh/sentinel) – 一个仓库管理机器人,用于审查和测试代码贡献,构建仓库的维护者列表,并与用户沟通拉取请求的状态。 -### For Contributor License Agreements +### 对于贡献者许可协议 -[CLA Assistant](https://github.com/cla-assistant/cla-assistant) – Contributed by SAP, the CLA Assistant streamlines workflows by handling the legal side of contributions for users. The Assistant asks code contributors to sign CLAs as they make their code contributions and authenticates each contributor with his or her GitHub account. It also updates the status of a pull request when the contributor agrees to the CLA and automatically asks users to re-sign the CLA for each new pull request if changes are made to the CLA. +[CLA Assistant](https://github.com/cla-assistant/cla-assistant) – 由 SAP 贡献,CLA Assistant 通过处理用户的法律贡献方面,简化了工作流程。该助手在用户进行代码贡献时要求代码贡献者签署 CLA,并使用其 GitHub 帐户对每个贡献者进行身份验证。如果对 CLA 进行更改,它还会自动更新拉取请求的状态,并在每个新的拉取请求中要求用户重新签署 CLA。 -![SAP’s CLA Assistant tool](/img/guides/tools-for-managing-open-source-programs5.png) +![SAP 的 CLA Assistant 工具](/img/guides/tools-for-managing-open-source-programs5.png) -[CLA Portal](https://github.com/vmware/claportal) – From VMware, CLA Portal adds a workflow to enable contributors to digitally sign a CLA for pull requests to your GitHub repositories. When a developer opens a pull request, they are prompted to sign the agreement if needed. Also included is an administrator interface for CLA authoring, CLA-to-project mapping, and agreement reviews. +[CLA Portal](https://github.com/vmware/claportal) – 来自VMware,CLA Portal为向你的GitHub仓库提交拉取请求的贡献者增加了一个工作流程,以便他们能数字化签署CLA。当开发者打开一个拉取请求时,如果需要,他们会收到签署协议的提示。此外,还包括了CLA起草、CLA与项目的映射及协议审核的管理员界面。 -[DCOB](https://github.com/chef/dcob) – A Developer Certificate of Origin Bot which helps to enforce developer certificate of origin sign-offs for each code change in a pull request. The DCOB sets the status for each accepted code change, as required by the [Developer Certificate of Origin](http://developercertificate.org/). +[DCOB](https://github.com/chef/dcob) – 该机器人有助于强制执行针对拉取请求中每个代码变更的开发者原创证书签名。DCOB根据[开发者原创证书](http://developercertificate.org/)的要求,为每个被接受的代码变更设置状态。 -[EasyCLA](https://github.com/communitybridge/easycla) - By the Linux Foundation to streamline the CLA process. It focusses on Linux Foundation projects, but projects outside the Linux Foundation are considered on a case-by-case basis. In addition to the typical CLA tooling, it enables whitelisting of corporate contributers. It integrates with GitHub pull requests. +[EasyCLA](https://github.com/communitybridge/easycla) - 由 Linux Foundation 提供,用于简化 CLA 流程。它专注于 Linux Foundation 项目,但会根据情况考虑 Linux Foundation 之外的项目。除了典型的 CLA 工具之外,它还支持对企业贡献者进行白名单设置。它与 GitHub 拉取请求集成。 -### GitHub Management at Corporate Scale +### GitHub 在企业级上的管理 -* [hubcommander](https://github.com/Netflix/hubcommander) - A Slack bot for GitHub organization management, HubCommander uses chat-ops – or conversation-driven development – to help manage GitHub projects. It creates a simple way to perform privileged GitHub organization management tasks without granting administrative or owner privileges to your GitHub organization members. -* [opensource-portal](https://github.com/Microsoft/opensource-portal) – From Microsoft, this tool is designed to help large organizations with their large-scale GitHub management operations, onboarding and more. This is one of a suite of tools provided by the Open Source Programs Office at Microsoft. -* [settings](https://github.com/bkeepers/github-configurer) – This app syncs repository settings defined in .github/settings.yml to GitHub, enabling pull requests for repositories. -* [zappr](https://github.com/zalando/zappr) - Zappr is a GitHub integration built to enhance project workflows. From Zalando, zappr helps developers to increase productivity and improve open-source project quality by removing bottlenecks around pull request approval and helping project owners halt “rogue” pull requests before they're merged into the project master branches. +* [hubcommander](https://github.com/Netflix/hubcommander) - 一个用于GitHub组织管理的Slack机器人,HubCommander采用了对话驱动开发,以帮助管理GitHub项目。它创建了一种简单的方法来执行特权GitHub组织管理任务,无需向你的GitHub组织成员授予管理员或所有者权限。 +* [opensource-portal](https://github.com/Microsoft/opensource-portal) – 来自微软的此工具旨在帮助大型组织进行大规模的GitHub管理操作、入职等事宜。这是微软开源程序办公室提供的一套工具之一。 +* [settings](https://github.com/bkeepers/github-configurer) – 此应用将.github/settings.yml中定义的仓库设置同步到GitHub,为仓库启用拉取请求。 +* [zappr](https://github.com/zalando/zappr) - zappr是一个为增强项目工作流程而构建的GitHub集成。来自Zalando,zappr通过消除围绕拉取请求审批的瓶颈,并帮助项目所有者在合并到项目主分支前阻止“失控”的拉取请求,从而帮助开发者提高生产力并提升开源项目的质量。 -### Project Quality +### 项目质量 -* [CII Best Practices Badging](https://bestpractices.coreinfrastructure.org/) – From The Linux Foundation, the Core Infrastructure Initiative (CII) Best Practices badge is a way for Free/Libre and Open Source Software (FLOSS) projects to show that they follow best practices. Projects can voluntarily self-certify for free by using this web application to explain how they follow each best practice. -* [CodeClimate](https://codeclimate.com/) – Code Climate empowers organizations to take control of their code quality by incorporating fully configurable test coverage and maintainability data throughout the development workflow. It’s free for open source projects! +* [CII 最佳实践徽章](https://bestpractices.coreinfrastructure.org/) – 来自 Linux 基金会的核心基础设施倡议 (CII) 最佳实践徽章是自由/开源软件 (FLOSS) 项目展示他们遵循最佳实践的一种方式。项目可以通过使用此 Web 应用程序自愿免费进行自我认证,解释他们如何遵循每个最佳实践。 +* [CodeClimate](https://codeclimate.com/) – Code Climate 让组织能够通过在开发工作流程中完全可配置的测试覆盖率和可维护性数据来控制他们的代码质量。对于开源项目,它是免费的! -## Tools for communications and collaboration +## 沟通与协作工具 -Of course, open source development isn’t just about the code. It also requires healthy communications and collaborations between a diverse group of people who are working on the projects inside and outside of enterprises,as well as by staff members in a company’s Open Source Program Office. +当然,开源开发不仅仅关乎代码。它还需要在企业内外工作在项目上的多样化群体之间进行健康的沟通和合作,以及公司开源项目办公室的员工。 -For that developers can lean on tools they may already be using for other projects, including [Internet Relay Chat (IRC)](http://www.irc.org/links.html), where developers can post inquiries and get [quick responses to development-related topics](http://blog.andrewray.me/irc-the-secret-weapon-of-developers/). Another example is [TWiki,](http://twiki.org/) which is an open source enterprise Wiki and web collaboration platform where developers can discuss code and projects and related topics. +为此,开发人员可以利用他们可能已经在其他项目中使用的工具,包括 [互联网中继聊天(IRC)](http://www.irc.org/links.html),开发人员可以在其中发布查询并获取与开发相关主题有关的[快速响应](http://blog.andrewray.me/irc-the-secret-weapon-of-developers/)。另一个例子是 [TWiki](http://twiki.org/),它是一个开源企业 Wiki 和 Web 协作平台,开发人员可以在其中讨论代码、项目和相关主题。 -Communications can also be fostered through social media platforms, web portals, open source project repositories and other places where input, questions and discussions can be found and fostered. +通过社交媒体平台、网页门户、开源项目仓库以及其他可以发现并促进输入、问题和讨论的地方,也能促进沟通。 -Then there’s [Slack](https://slack.com/), which is an online team project management and communications platform where users can access and share messages and files, organize workflows, perform searches for information and more. Slack can be configured to receive notifications for support requests, code check-ins, error logs and other tasks as well. +还有 [Slack](https://slack.com/),它是一个在线团队项目管理和沟通平台,用户可以访问和共享消息和文件、组织工作流程、进行信息搜索等。Slack 可以配置为接收支持请求、代码提交、错误日志等任务的通知。 -And don’t forget your company’s public relations and marketing staff when it comes to shouting out your company’s participation and support of open source. Social media accounts with sites including Twitter, Reddit, Facebook, LinkedIn and others are important, as well as the use of internal and external blogs and websites. Customer Relationship Management (CRM) software, as well as email blasts and newsletters, can help companies keep customers and clients informed about their open source progress. +在宣传公司的参与和支持开源时,不要忘记公司的公共关系和营销人员。社交媒体账号包括 Twitter、Reddit、Facebook、LinkedIn 等网站都很重要,还有内部和外部博客和网站的使用。客户关系管理 (CRM) 软件以及电子邮件群发和新闻通讯,可以帮助公司让客户和客户了解他们的开源进展。 -## Tools for corporate-scale GitHub management +## 企业级 GitHub 管理工具 -When it comes to the tools your company provides and uses for its corporate open source projects, the most important ones are arguably those which help companies manage their corporate-scale GitHub operations. GitHub is a perfect platform for many operations, but for large, complex companies such as Google, Microsoft, Facebook, Twitter, LinkedIn and others, there can be many limitations to using the standard GitHub offerings. +当涉及到公司为其企业开源项目提供和使用的工具时,最重要的无疑是那些帮助公司管理其企业级 GitHub 运营的工具。GitHub 是许多操作的理想平台,但对于谷歌、微软、Facebook、Twitter、LinkedIn 等大型复杂公司来说,使用标准的 GitHub 服务有许多限制。 -Large enterprises need many more capabilities, including things like identity management, settings and permissions management, security and two-factor authentication enforcement, as well as deeper means to understand and track code repositories. +大型企业需要更多的功能,包括身份管理、设置和权限管理、安全性和双因素认证的执行,以及更深入地理解和跟踪代码仓库的方法。 -That’s where specialized, automated tools often need to be built to handle tasks such as onboarding, offboarding, enforcing security policies and giving developers request access to repositories. +这就是为什么需要构建专门的自动化工具来处理诸如入职、离职、执行安全政策以及为开发人员提供仓库访问请求等任务。 -Microsoft responded to its own unique requirements by building its own tools to handle many such tasks to streamline and improve its open source program. Microsoft has a [healthy presence on GitHub,](https://github.com/Microsoft) with over 4,000 repositories and involving more than 4,500 developers to date. +微软根据其自身的独特需求构建了自己的工具来处理许多此类任务,以简化和改进其开源计划。迄今为止,微软在 GitHub 上有着[健康的存在](https://github.com/Microsoft),拥有超过 4000 个仓库,涉及超过 4500 名开发人员。 -> “That management of your GitHub presence is something that as you scale, it becomes important. You get a GitHub organization, which is a collection of repositories, and then you get members and you have teams. Managing all of that stuff becomes a little bit complicated, especially if it starts to scale out to hundreds of repositories, hundreds of people and multiple organizations on GitHub.” – [Jeff McAffer](https://twitter.com/jeffmcaffer), Director of the Open Source Programs Office at Microsoft +> “随着规模的扩大,管理你的 GitHub 业务变得重要。你会得到一个 GitHub 组织,这是一系列仓库,然后你会有成员和团队。管理所有这些东西变得有点复杂,尤其是当它开始扩展到数百个仓库、数百人和多个 GitHub 组织时。” – [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源项目办公室主任 -One of the things Microsoft created was a custom-built self-service [GitHub management and onboarding portal](http://www.jeff.wilcox.name/2015/11/azure-on-github/) for organizing its projects, repositories, and teams. On its simplest level, the web-based portal allows developers to map their Microsoft company ID to their GitHub ID, which bolsters system security and helps simplify the organization of large numbers of developers who are involved in large numbers of important projects. +微软创建的工具之一是一个定制的自助 [GitHub 管理和入职门户](http://www.jeff.wilcox.name/2015/11/azure-on-github/),用于组织其项目、仓库和团队。在最简单的层面上,这个基于网络的门户允许开发人员将他们的微软公司 ID 映射到他们的 GitHub ID,从而增强系统安全性,并有助于简化大量重要项目中涉及的开发人员的组织工作。 -The portal also lets employees authenticate with GitHub and Microsoft, which creates a “virtual link” of their identities so they can do their work while giving them needed permissions for tasks depending on their work roles. If employees leave the company, the system can be adjusted to remove or reclassify their access rights as needed. +该门户还允许员工通过 GitHub 和微软进行身份验证,从而创建他们身份的“虚拟链接”,使他们能够在工作中获得所需权限,具体取决于他们的工作角色。如果员工离开公司,该系统可以进行调整,以根据需要删除或重新分类他们的访问权限。 -The portal runs on one or more cloud servers and relies on a cache to help with sessions and reduce pressure on the GitHub API. The Microsoft portal, which averages about 1,000 unique users daily as a tool for its engineers, is part of the company’s growing open source efforts, which now includes more than 10,000 engineers who are using, contributing to and releasing open source code. +该门户运行在一个或多个云服务器上,并依靠缓存来帮助会话管理并减轻 GitHub API 的压力。作为其不断增长的开源努力的一部分,微软门户每天平均有大约 1000 名独特用户使用这个工具,这些努力现在包括了超过 10000 名使用、贡献和发布开源代码的工程师。 -## Final words +## 结束语 -Hey, nobody said it was going to be simple to move your company into the world of open source. But plenty of other companies, including giants like Microsoft and Google have done this before you and have provided detailed road maps, code, suggestions, and more to make your own journey easier. +嘿,把你的公司引入开源世界并不简单。但是包括微软和谷歌在内的许多其他公司已经在你之前做到了这一点,并提供了详细的路线图、代码、建议等,以使你的旅程更加轻松。 -The creation of an open source program office and the selection of a package of critical tools to get your efforts started are within your grasp. And they are likely already inspiring great anticipation among your developers, many of whom are probably already contributing to open source projects on their own (or at work, under cover of darkness). +创建一个开源项目办公室并选择一套关键工具来启动你的工作,这是你力所能及的事情。而且它们很可能已经激发了你开发人员的极大期待,其中许多人可能已经在自行(或在工作中秘密地)为开源项目做出贡献。 -By collaborating on open source projects and inviting others to collaborate with you, your company can gain immeasurable benefits and drive its progress forward with energy and innovation. +通过在开源项目上进行协作并邀请其他人与你合作,你的公司可以获得无可估量的利益,并通过充满活力和创新推动其进步。 -Having the right tools is critical to empowering your company’s open innovation. +拥有合适的工具对推动公司开放创新至关重要。 -## Acknowledgements +## 致谢 -The affiliations of the contributors are from when the article was originally published in 2019: +贡献者所属组织以文章于2019年最初发布时为准: -* [Chris Aniszczyk](https://twitter.com/cra), COO of the Cloud Native Computing Foundation. -* [Jeff McAffer](https://twitter.com/jeffmcaffer), Director of the Open Source Programs Office at Microsoft. +* [Chris Aniszczyk](https://twitter.com/cra),CNCF 的首席运营官。 +* [Jeff McAffer](https://twitter.com/jeffmcaffer),微软开源项目办公室主任。 diff --git a/content/zh-CN/guides/marketing-open-source-projects.md b/content/zh-CN/guides/marketing-open-source-projects.md index ad3c958a..0e954f03 100644 --- a/content/zh-CN/guides/marketing-open-source-projects.md +++ b/content/zh-CN/guides/marketing-open-source-projects.md @@ -1,200 +1,200 @@ --- -title: Marketing Open Source Projects +title: 推广开源项目 --- -Marketing is as crucial as code to any open source project’s success. Organizations that participate in open source projects play a vital role in developing a sustainable ecosystem around a project by marketing the project through their own networks. Organizations, in turn, benefit from those marketing efforts by growing their visibility in the project community and associating their own brand with the project. The benefits can be seen in a growing project leadership role, attracting developers to your organization, and promoting your open source products and services. The key is to promote the project first and always remain authentic and true to the open source ethos of openness and transparency. +市场推广和代码一样,对任何开源项目的成功至关重要。参与开源项目的组织通过利用自身的网络推广项目,从而围绕项目建立可持续发展的生态系统,组织在其中扮演着重要角色。作为回报,组织可以通过提高项目在社区中的知名度并将自己的品牌与项目联系起来,从这些推广工作中受益。其好处包括:不断增强的项目领导角色、吸引开发人员加入你的组织以及推广你的开源产品和服务。成功的关键是首先要推广项目,并始终秉承开放和透明的开源精神保持真实性。 -Learn how to promote an open source project to attract contributors, find users, and raise the profile and credibility of your project. Do this while simultaneously growing your own open source credibility within the project community, attracting talented developers, and promoting your open source projects and services. +了解如何推广开源项目以吸引贡献者、寻找用户并提高项目的知名度和可信度。这样做的同时还可以提高你自己在项目社区中的开源信誉,吸引有才华的开发人员,并推广你的开源项目和服务。 -## The challenge of marketing open source projects +## 开源项目推广的挑战 -Marketing can be perceived as a dirty word. The negative connotation can drag down efforts to discuss the subject seriously, let alone deploy a marketing plan. However, the reality is different from the perception. Without a strong marketing effort shining light on a project, even the most brilliant code can wither and die in the dark of obscurity. +市场推广可能会被视为一个贬义词。其负面含义可能会妨碍我们认真地讨论这个话题,更不用说部署推广计划了。然而,现实与想象不同。如果没有强有力的市场推广来支撑一个项目,即使是最出色的代码也会在默默无闻的黑暗中枯萎和消亡。 -> "We who work on open source projects want to work on projects that other people find valuable, that other people use, that are widely accepted within the industry, and the reality is that doesn't just happen by magic," says [Dawn Foster](https://github.com/geekygirldawn), OSS Strategy Lead at Pivotal Software. +> “我们从事开源项目的人都希望从事价值被认可、被人使用、在行业内被广泛接受的项目,但现实是这些都不会凭空出现,”[Dawn Foster](https://github.com/geekygirldawn),Pivotal Software 公司的 OSS 战略主管说。 -While the strengths of the technology alone can occasionally attract a crowd to form the basis for a community, that scenario is no more the norm than winning the lottery. +虽然说技术本身的优势有时可以吸引到大众来形成社区的基础,但这种机率甚至比中彩票还难。 -> "The notion ‘if you build it, they will come’ is completely wrong. At the very least, it is an excuse for some short-sighted and dangerous assumptions about what it takes to make a project successful," said Deirdré Straughan, Open Source Content Lead at Amazon Web Services (AWS), in [her talk](https://www.linux.com/news/how-market-open-source-project) at Open Source Summit NA two years ago. “Just building it is rarely enough, yet a lot of people still hope that great code alone will be successful. That attitude sunk quite a few technologies and even entire companies.” +> “ ‘只要创造出来,就会有人来用’的观念是完全错误的。充其量,这是个短视和危险的假设借口,它认为不需要付出努力而项目就可以取得成功。” Deirdré Straughan,Amazon Web Services (AWS) 的开源内容主管,她在两年前的北美开源峰会上的[演讲](https://www.linux.com/news/how-market-open-source-project) 说。“仅仅构建一个软件是远远不够的,但很多人仍然希望只靠优秀的代码本身就能取得成功。这种态度葬送了不少技术,甚至让整个公司陷入困境。” -Given the tremendous growth of open source in the past decade, marketing open source projects is increasingly important. +鉴于开源在过去十年中的巨大增长,开源项目的市场推广变得越来越重要。 -> "There are over 80 million repos on Github. There are also many duplicate functions being created by different people so that there could be five or more libraries to solve one problem. If you don't actively communicate what your project is doing and what you're looking for, people are not going to join you," says [Nithya Ruff](/www.linkedin.com/in/nithyaruff/), senior director of the Open Source Practice at Comcast. +> “Github 上有超过8000万个存储库。还有许多重复的功能是由不同的人创建的,因此可能会有五个或更多的库来解决同一个问题。如果你不积极沟通你的项目正在做什么、以及你正在寻找什么,人们不会加入你,” Comcast开源实践高级总监[Nithya Ruff](https://www.linkedin.com/in/nithyaruff/)说道。 -> "People are not even going to discover you, so it's a question of if you want to be relevant, if you want to grow your user base, your communities, and to raise money for your project, then yes, you do need to go out, and communicate, which is what marketing actually is." +> “人们甚至不会发现你,所以问题是你是否想变得相关,如果你想扩大你的用户群、你的社区,并为你的项目筹集资金,那么是的,你的确需要走出去,进行交流,这才是真正的推广。” -Marketing involves a plethora of actions bundled in a single function: selling. That is true even when what you’re selling happens to be free. +市场推广涉及将大量行为捆绑在一个功能中:销售。即使你销售的产品恰好是免费的,情况也是如此。 -> "Marketing is about selling. Open Source is free. I don't have to try to sell anything, so why would I need marketing?" asks Straughan. "The thing is, you are selling. You're just not selling stuff, and you're not directly asking for money. You are selling ideas, and the currency you are requesting in return is something extremely valuable, which is people's time and attention." +> “市场推广就是销售。既然开源是免费的,如果我不需要销售任何东西,那为什么还需要市场推广呢?” Straughan问道。“问题是,你正在卖东西。但你不是在卖一件物品,也不是直接要钱。其实你是在卖一个想法,而你要求的回报却是非常有价值的东西:那就是人们的时间和关注。” -Of course, most projects will need to ask for money and other material support as time goes on. Marketing becomes even more essential then. Without such support, a project will inevitably hit a wall from a lack of contributors and maintainers, a lack of creative infusion, and a lack of momentum. +当然,随着时间的推移,大多数项目仍需要寻求资金和其他物质的支持。那么市场推广就变得更加重要。如果没有这样的支持,项目将不可避免地因缺乏贡献者和维护者、缺乏创意注入和缺乏动力而碰壁。 -> "Perhaps we just need to use a different word. We may need to use community development or project advocacy as a word in the open source realm as opposed to marketing, and perhaps then people will realize that they need to do it," says Ruff. +> “也许我们需要换个不同的词来表述。我们可以使用社区发展或项目推广作为开源领域里的表述,而不是市场推广,也许那时人们就会意识到他们的确需要这样做。” Ruff说。 -By any name, marketing requires expertise and a precise set of tools. It is not reliant on a set of soft skills, as it is often perceived to be. A strategic plan must be built, specific and measurable goals laid out, specialized tools used, and messaging hammered out. A brand must be named, a logo drawn, the problem solved promoted to certain craftsman and not thrown to the wind. +不管人们怎么称呼它,推广都需要专业知识和一套精密的工具。推广并非像人们通常认为的那样,仅仅依靠一些软技能就能实现。推广需要建立战略计划,制定具体可衡量的目标,使用专业工具,并反复斟酌信息传递的方式。品牌需要命名,需要设计标志,需要将要解决的问题推广给特定的人群,而不是漫无目的地传播。 -But that’s not to say that soft skills are not also required for a marketing plan to be successful. If the marketing is too slick, too commercialized, it will undoubtedly be rejected by the very audience it seeks. +但这并不是说推广计划的成功不需要软技能。如果推广太圆滑、太商业化,无疑会被它所寻求的受众所拒绝。 -> "The marketing tactics should be very, very different in company versus community. If you just duplicate what's done in company marketing, people could get turned off that this is a commercial sales pitch, or it's too slick, or it's too smooth, and they don't want to be involved in that," says Ruff. +> “公司和社区的推广策略应该非常非常不同。如果你只是重复公司市场推广中所做的事情,人们可能会觉得这是商业销售宣传,或者太圆滑,或者太圆滑,于是他们就不会参与其中,” Ruff说。 -> "Community engagement tends to be more about a different set of tactics. It's creating good documentation. It's creating an easier contribution guide. It's being at meet-ups. It's developer-to-developer advocacy of the project, it's demoing the project. Those are the things that often work as opposed to a very glossy, smooth marketing that often happens in companies." +> “社区参与需要更多的、不同的策略。例如,创建良好的文档,创建更容易的贡献指南,举办见面会。它是开发者与开发者之间的项目宣传,项目演示。这些有效的方法,往往区别于在公司中采用的那种非常光鲜亮丽、圆滑的市场推广。” -For an open source marketing campaign to be successful it must be done right from the outset, meaning it must be guided and executed with sensitivity, openness and authenticity. +开源项目的推广活动要想取得成功,就必须从一开始就做好,这意味着必须以敏锐、开放和真实的方式指导和执行。 -## Collaboration and co-marketing +## 协作和联合推广 -A successful marketing effort begins and ends with collaboration, just like an open source project does. Trust is tantamount and that calls for transparency. +成功的推广工作始于协作,终于协作,就像开源项目一样。真正的信任源于透明。 -> "You need to be very transparent about the roadmap, about the project's objectives, and also demonstrate what the goal of the project is, and how it's being run," says Ruff. “And also reveal what the governance model is for the project because open source developers who want to get involved in the project want to know that the leadership of the project is someone they would trust, but more importantly, that it's not being hijacked by one company, one party or another.” +> “你需要对路线图、项目目标非常透明,并展示项目的目标是什么以及它是如何运行的,” Ruff说。 “还要告知该项目的治理模型是什么,因为想要参与该项目的开源开发者希望知道该项目的领导者是他们信任的人,但更重要的是,该项目不是被一家公司、一个团体或另一个团体所操控的。” -However, as it is with all things open source, communication is not one way. The community must be given ample opportunity to have its say. +然而,正如所有开源事物一样,沟通并不是单向的。必须给予社区充分发表意见的机会。 -Good practices in getting buy-in on marketing plans used by a variety of projects include: +推广计划中,可以应用于各种项目,被证明有效的良好实践如下: -* Having discussions on the mailing list so that everybody can follow the debate and weigh in -* Allowing at least 48 hours for everyone to weigh in because not everyone is in the same time zone or even on the same continent -* Documenting discussions and events and posting them in a common area where everybody can access the information and see what's happening. -* Periodically providing a face-to-face venue where people can actually come together, build relationships, and build trust with each other. -* Plan meetups at events, to enable and encourage hallway conversations, advisory board meetings, and other in-person encounters. +* 在邮件列表上进行讨论,以便每个人都可以跟随辩论并发表意见。 +* 给每个人至少48小时的时间来发表评论,因为并非每个人都在同一时区,或者在同一大陆。 +* 记录讨论和活动并将其发布在公共区域,每个人都可以访问信息并查看正在发生的情况。 +* 定期提供面对面的场所,让人们能够真正聚集在一起,建立关系并彼此建立信任。 +* 计划活动中的聚会,以方便和鼓励非正式的对话,顾问委员会会议和其他面对面的会面。 -There are several ways to organize marketing, for example by establishing a marketing committee or even by hiring a professional marketing firm. Different projects organize marketing planning and deployment in different ways, but the most successful always starts with a deliberate decision that is supported by the project community. One good example is the [Fedora Community’s Marketing Team](https://fedoraproject.org/wiki/Marketing) and how they organize in a transparent fashion with calls to action. +推广的组织方法有多种,例如建立推广委员会,甚至聘请专业推广公司。不同的项目以不同的方式组织推广规划和部署,但最成功的项目总是从一个深思熟虑的决定开始并获得项目社区支持的。一个很好的例子是 [Fedora社区的推广团队](https://fedoraproject.org/wiki/Marketing) 以及他们如何以透明的方式组织并呼吁采取行动。 -> "In the Yocto Project, we set aside some of the membership dues for advocacy teams, a sub-team of the board to use. That allowed us to pay for the website, to pay for having a good presence at conferences, for giveaways, for collateral, and other kinds of marketing work that needed to be done," said Ruff. +> “在Yocto项目中,我们预留了一些会员费供宣传团队(董事会的一个子团队)使用。这使我们能够支付网站费用、支付出席会议的费用、赠品费用、文档材料品以及其他需要完成的推广工作。” Ruff说。 -It is common for projects to undervalue the marketing and focus on developer resources instead. To prevent this common mistake from sabotaging your project’s marketing efforts, bring volunteers and staff on board that can help keep marketing and developer resources in proper balance and on target. +低估项目推广并只关注开发者资源的情况很常见。为了防止这种常见错误破坏项目的推广工作,请让志愿者和工作人员参与其中,这有助于保持推广和开发者资源的适当平衡和有效。 -### How marketing is done in collaborative projects and open source foundations +### 开源基金会中进行推广 -Funding is essential for most marketing efforts. Smaller projects can benefit from volunteer-fueled, bootstrap tactics that cost little or no money, but this strategy will only carry a project so far. Smaller projects will eventually find that they need more resources for marketing too. Most projects address this need by building a pool of resources from the community and corporate contributors or sponsors. +资金对于大多数推广工作至关重要。较小的项目可以从志愿者推动的策略中受益,这些策略只需要花费很少或不需要花费资金,但这种策略只能使项目止步为止。较小的项目最终会发现他们还是需要更多的推广资源支持。大多数项目通过建立来自社区和企业贡献者或赞助商的资源池来满足这一需求。 -Certainly you should look for assistance from companies that use your project. Approaching a large user to ask for support is an accepted and expected practice. Such requests are generally well received because it is as much to a user’s advantage to keep that project viable as it is to the people who started the project and the community that supports it. +当然,你应该向使用你的项目的公司寻求帮助。向大用户寻求支持是一种可接受且符合预期的做法。此类请求通常也会被得到认可的,因为维持该项目对用户有利,对项目的发起人和项目的社区也有利。 -> "Ask them to volunteer to support you from a code contribution, money, evangelization, and/or marketing advocacy perspective. That is, I think, fair game," says Ruff. +> “让他们自愿从代码贡献、金钱、传播和/或推广的角度来支持你。我认为,这是公平的。” Ruff说。 -This is rarely done via a formal request sent to corporate users, but rather it begins as a discussion in established relationships within the project. +通过给企业用户发送正式请求对项目进行支持,还不如从项目内已经建立好的关系来开始讨论。 -> "If a project leader wants to do something with Pivotal for example, they could approach me or the half a dozen other people who are participating in something like Kubernetes and we could chat about what we could do together," Foster explained. +> “例如,如果项目负责人想与 Pivotal 合作,他们可以联系我或其他六位参与 Kubernetes 等项目的人,我们可以讨论大家可以一起做什么,” Foster 解释道。 -Beyond looking internally for marketing resources, projects can look outwards to an umbrella organization and open source foundations for assistance. For example, if your project is a cloud tool, then you might benefit from the bigger umbrella of the [CNCF](https://cncf.io) or [OpenJS](https://openjsf.org) Foundation. Another example is the ASF which helps projects with [press releases](https://www.apache.org/press/) which is a useful form of marketing. +除了在内部寻找推广资源之外,项目还可以向外寻求上级组织和开源基金会的帮助。例如,如果你的项目是云工具项目,那么你可能会从[CNCF](https://cncf.io) 或 [OpenJS](https://openjsf.org) 基金会得到帮助。另一个例子是 ASF,它通过[新闻稿](https://www.apache.org/press/) 来帮助项目,这是一种很有用的推广形式。 -Project leaders rarely, if ever, solicit support from corporations or organizations that they are not affiliated with in some way. The reason why is simple and straightforward: the project is collaborative, and so is the marketing because everyone involved wants the project to succeed. +项目负责人很少(如果有的话)寻求与他们没有任何联系的公司或组织来获得支持。原因简单而直接:项目是需要协作的,推广也是如此,因为每个参与者都希望项目成功。 -> "People want to get the word out about the stuff that they're doing, whether they are contributing code, or contributing resources and support, or both," says Foster. “Pooling resources, including money and marketing talent, or using those funds to hire a marketing agency, is the smart way to get the word out.” +> “人们希望宣传他们正在做的事情,无论他们是贡献代码,还是贡献资源和支持,或者两者兼而有之,” Foster说。 “汇集资源,包括资金和推广人才,或利用这些资金聘请推广机构,是宣传的明智方法。” -Once sufficient resources are added to the pool, there must be a structure in place to govern how those resources are used. Generally, this function is in the province of the project’s advisory board. Usually there are two sub-parts of the advisory board. The first is the technical steering committee, which makes all the road map and technical decisions. The second sub-part is the governing board of directors, which governs the positioning of the project, the name and logo, the website, promotional activities, event participation, and even consistency in explaining the features and functions in demos. Volunteers, marketing committees, and hired marketing agencies typically deploy the steps in the marketing plan, but it is an advisory board that provides the guidance. +一旦获得足够的资源,就必须有一个合适的机构来管理如何使用这些资源。一般来说,该职能属于项目顾问委员会的职责范围。顾问委员会通常有两个子部门。第一个是技术指导委员会,负责制定所有路线图和技术决策。第二个子部分是管理董事会,负责管理项目的定位、名称和标志、网站、促销活动、活动参与,甚至解释项目演示中特性和功能的一致性。通常,由志愿者、推广委员会和聘请的推广机构来执行推广计划,由顾问委员会来提供指导。 -However, the success of the marketing campaign rests as heavily on community participation as it does on the advisory board. Strategic planning is key, but it is all for naught if no one brings the plan to bear. There are lots of opportunities for the community to get involved and share the load. The important thing is to leverage the skills of community members. For example, some people are great at public speaking so it would make sense to ask them to speak at events. +然而,推广活动的成功在很大程度上取决于社区的参与和顾问委员会的参与。战略规划固然重要,但如果没有人实施,一切都是徒劳。社区有很多机会参与并分担工作。重要的是利用社区成员的技能。例如,有些人擅长公开演讲,因此邀请他们在活动中发言则是人尽其才。 -It is important to note, however, that marketing is a true discipline rather than the soft skill it is perceived to be. While it is important to leverage the individual skills within the community, it is a mistake to believe that anyone can handle marketing, no matter how smart those people may be. There is a reason, after all that organizations like the Linux Foundation went to the effort of building a strong and complex marketing support infrastructure for projects which leaves little to chance. +然而,值得注意的是,推广是一门真正的学科,而不是人们认为的软技能。虽然利用社区内的个人技能很重要,但以为任何人都可以做好推广活动则是错误的,无论这些人有多聪明。毕竟像 Linux 基金会这样的组织致力构建强大而复杂的推广基础设施,以此来支持那些几乎没有机会的项目,这是其中的原因。 -> "People think of it as kind of a non-technical skill or a soft skill, but the reality is that it is not really something that you can just pick up and do without having any kind of training," says Foster. "People who do marketing for a living have a whole set of tools that they use to do everything from identifying target audiences, to managing big lists, analyzing data, and measuring the results of marketing campaigns." +> “人们认为推广是一种非技术技能或软技能,但实际上,它并不是不需要任何培训就能学会并做的事情,” Foster说。 “ 推广专业的人拥有一整套工具,他们用它们来完成确定受众目标、管理客户名单、分析数据和衡量推广活动结果的所有事情。” -It is a wise choice to also actively recruit people with marketing skills for your project. While code contributions will always be at the heart of any project, supporting roles such as documenting and marketing, can also be crucial. +积极招募具有推广技能的人员是一个明智的选择。虽然代码贡献始终是任何项目的核心,但文档和推广等支持角色也至关重要。 -> "The big open source projects have loads of people who are working on things outside of code," says Foster. "They have people who are working on events, working on documentation, working on promotion, evangelism, product and program management, and all of these things. Within Kubernetes, one of the areas that I participate in is the contributor experience special interest group, where we work to make the on the experience for contributors better." +> “大型开源项目有很多人从事非代码的工作,” Foster说。“他们有负责活动、文档、推广、传播、产品和项目管理以及所有这些工作的人员。在 Kubernetes 中,我参与的领域之一是贡献者体验特殊兴趣小组,我们致力于改善贡献者的体验。” -Marketing committees are a good way to organize the marketing workloads internally. This enables smart orchestration of everything from the volunteers charged with producing community assets such as collateral materials, websites, blogs, YouTube videos, and social media to planning event support from speakers to booths and meetups. Generally speaking, marketing committees execute the marketing plan as developed or approved by the governing board. +成立推广委员会是组织内部有效分担推广工作量的一种好方法。这样一来,可以对各项工作进行巧妙的协调,包括:安排志愿者负责制作社区资产(如宣传材料、网站、博客、YouTube 视频和社交媒体),以及活动支持的规划(例如寻找演讲者、搭建展台和线下聚会)。总而言之,推广委员会执行理事会制定或批准的推广计划。 -### Co-marketing opportunities and best practices +### 联合推广的机会和最佳实践 -In addition to the project’s own marketing resources, contributing organizations can help market the project via co-marketing initiatives which benefit all participants. +除了项目自己所有的推广资源外,各个参与项目贡献的组织还可以通过联合推广举措来帮助一起推广项目,这会使所有参与者共同受益。 -"There are a lot of opportunities to do some co-marketing with the companies that are involved in the open source project," says Foster. “The big companies have rather large promotion engines and they do a lot of marketing. Open source projects can certainly benefit from being included in that.” +“有很多机会与参与开源项目的公司一起进行联合推广,” Foster说。 “大公司有很强的促销能力,他们做了很多推广。参与其中的开源项目自然也能从中受益。” -By making it clear that they support one or more open source projects, organizations can attract talented developers who are skilled or interested in those projects -- which is a win-win. +通过明确支持一个或多个开源项目,组织还可以吸引到那些对项目熟练或者感兴趣的有才华的开发者加入组织,这是一种双赢。 -To identify co-marketing opportunities, you can start by talking over ideas with the employees of big companies that are working on your project, because they are in a position to see both the project’s and the company’s interests and where they dovetail. +要确定联合推广机会,你可以首先与参与项目的大公司的员工详细讨论想法,因为他们既能够看到项目的利益和公司的利益,又能看到它们的契合点。 -"A lot of the co-marketing opportunities probably come from the employees who are working in those projects bringing opportunities back into their company," says Foster. But feel free to ask for ideas or pitch ideas to people to get the discussion rolling. +“许多联合推广的机会可能源于在这些项目中工作的员工将机会带回公司,” Foster说。可以随时提出想法或向他人建议想法,以启动讨论。 -To keep marketing efforts balanced, be sure to follow community guidelines, develop your own marketing strategy, and devote resources accordingly. +为了保持推广工作的平衡,请务必遵循社区准则,制定自己的推广策略,并相应地投入资源。 -### Case studies to raise project awareness +### 提高项目知名度的案例研究 -It is a common practice to build case studies to promote awareness of open source project usage. This can be done within a company, as part of a co-marketing exercise or on behalf of an open source foundation. For example, the Kubernetes project publishes [case studies](https://kubernetes.io/case-studies/) along with its parent foundation CNCF on [production usage](https://www.cncf.io/projects/case-studies/) and lessons learned. A good case study is one that showcases the challenge, solution and benefits of adopting a project, you can browse some good examples here: +创建案例研究来提高人们对开源项目使用的认知是一种常见做法。这可以在公司内部完成,作为联合推广活动的一部分或代表开源基金会。例如,Kubernetes 项目及其母基金会 CNCF 在 [生产使用](https://www.cncf.io/projects/case) 上发布了[案例研究] (https://kubernetes.io/case-studies/)和经验教训。一个好的案例研究会展示项目的挑战、解决方案和收益。一些很好的例子如下: -* [Capital One: Supporting Fast Decisioning Applications with Kubernetes](https://www.cncf.io/case-study/capitalone/) -* [Squarespace: Gaining Productivity and Resilience with Kubernetes](https://www.cncf.io/case-study/squarespace/) -* [How HomeAway uses Node.js to Rev Operations to Scale and Tame Acquisition Woes](https://www2.thelinuxfoundation.org/node-casestudies-homeaway) -* [Node.js Drives Major Scale and Reliability at Uber](https://www2.thelinuxfoundation.org/node-casestudies-uber) -* [Node.js Helps NASA Keep Astronauts Safe and Data Accessible](https://www2.thelinuxfoundation.org/node-casestudies-nasa) +* [Capital One:用Kubernetes 支持快速决策应用]( https://www.cncf.io/case-study/capitalone/) +* [Squarespace:利用Kubernetes 提高生产力和弹性]( https://www.cncf.io/case-study/squarespace/) +* [HomeAway 如何使用 Node.js 来调整运营规模并缓解收购困境]( https://www2.thelinuxfoundation.org/node-casestudies-homeaway) +* [Node.js 推动 Uber 的大规模发展和可靠性]( https://www2.thelinuxfoundation.org/node-casestudies-uber) +* [Node.js 助力 NASA 保障宇航员安全和数据易于访问]( https://www2.thelinuxfoundation.org/node-casestudies-nasa) -## Creating a marketing strategy +## 制定推广策略 -There are similarities and differences between marketing a commercial product and marketing an open source project. What makes an open source marketing strategy unique stems from its decidedly un-commercial end goal. +推广商业产品与推广开源项目之间有相似之处,也有不同之处。推广开源项目策略的独特之处在于其明确的非商业最终目标。 -Companies do marketing to acquire customers who then buy the product and thus grow the company’s revenue, which is their end goal. By contrast, an open source community would want to acquire users because they want their software to be more useful by a broader set of communities, and for those people to help contribute to improving the software and moving the software forward. Since the goals are very different, the tactics should be too. +公司进行推广是为了获得客户,然后客户购买产品,从而增加公司的收入,这是他们的最终目标。相比之下,开源社区希望获得用户,是因为希望他们的软件能在更广泛的社区中变得更加有用,并让社区帮助改进软件并推动软件向前发展。既然目标不同,战术也应该不同。 -You can see the difference in how marketing tactics are accepted in the commercial market and the open source community too. Slick ads, videos, and other materials tend to succeed in the commercial market but fall flat in the open source community. Authenticity, transparency, and a real solution to a real problem carry more weight in the community. +针对商业市场和开源社区的推广策略是有差异的。华丽的广告、视频和其他材料往往在商业市场上取得成功,但在开源社区中却表现不佳。真实性、透明度以及能真正解决实际问题的方案在社区中具有更大的说服力。 -Market intelligence is crucial to success. You want to make sure that the project is solving a crucial problem and that can be articulated well. You also need to find out how your project differs from others that are tackling the same problem. But you’ll also need to know what the end goal is. +推广能力对于成功至关重要。你要确保该项目正在解决一个关键问题并且清晰地把它阐述明白。你还需要找出该项目与其他解决相同问题的项目不同处。另外,你还需要知道项目的最终目标。 -> "The other piece is what do I need for this project? Do I want to grow my user base, or do I want to grow a contributor base, or do I need money to raise money for this project because we cannot sustain the hardware or the infrastructure, or the hosting costs, or other cost that the project has," Ruff explains. “That then sets in place what the marketing plan should be, and which methods you will use, to reach those target audiences, and solve those problems.” +> “另一件事是这个项目需要什么?我想要扩大我的用户群,还是想要扩大贡献者基础,或者我是否需要资金所以来为这个项目筹集资金,因为我们无法维持硬件或基础设施、托管成本或项目的其他成本,” Ruff解释道。 “然后制定推广计划,以及将使用哪些方法来接触目标受众并解决这些问题。” -In other words, the project itself can point you to the marketing plan you need. +换句话说,项目本身可以为你指明所需的推广计划。 -> "The marketing strategy dovetails a bit on the structure of the project. If the marketing strategy dovetails directly into what the project is trying to accomplish, then things should work pretty seamlessly," says Foster. “It's just a matter of having people on the inside of the project who can help articulate what the project is trying to do in order to help figure out what the marketing strategy should be.” +> “推广策略与项目的结构有些契合。如果推广策略与项目想要实现的目标正好吻合,那么事情应该会进行得非常顺利,” 福斯特说。 “让那些能够阐明目标的项目内部人员帮忙确定应该采取的推广策略。” -### Identifying internal resources available +### 识别可用的内部资源 -Staffing the marketing effort will be a top concern as someone needs to be responsible for executing each step in the plan. Volunteers can help with many of the individual tasks from sending emails to giving keynote speeches at events. +推广工作的人员配置将是首要问题,因为需要有人负责执行计划中的每一步。志愿者可以帮忙完成其中许多任务,从发送电子邮件到在活动中发表主题演讲。 -Projects can also ask member companies and contributor companies to loan marketing talent and marketing executives to help with the effort. This has the added advantage of having a dedicated and skilled staff at the wheel on a regular, if not full time, basis. But this can be a bit tricky to manage and keep in balance since the same companies are likely contributing money and other resources as well. +项目还可以要求成员公司和贡献者公司借调推广人才和推广主管来帮助完成这项工作。这样做的另一个优点是拥有一支专业且技术精湛的员工队伍定期(即使不是全职)来执行计划。但这可能有点难以管理和保持平衡,因为同样的公司也可能贡献资金和其他资源。 -Stick to your community guidelines, the same ones that govern fairness, openness, and trust so that the community knows the project isn’t being hijacked or overly influenced by one company. +坚持你的社区准则,即管理公平、开放和信任的准则,以便社区知道该项目不会被一家公司把持或过度影响。 -Having a governing board oversee the budget also helps keep distance between invested forces and project decisions on spending. But before you have budget overseers, you need a budget to oversee, which is likely to come from member and contributing companies as previously discussed. But the community can stretch the budget further by pitching in. +让理事会监督预算还有助于在投资人和项目支出决策之间保持距离。但在拥有预算监督员之前,你得需要先获得预算可供监督,预算可能来自会员和贡献公司,如前文所述。但社区可以通过参与进一步扩大预算。 -> "We typically look for developer resources but overlook marketing resources. We should clearly advertise for things like a community manager for this project, or a volunteer to do a logo, or to make the website, etc.," says Ruff. +> “我们通常会寻找开发人员资源,但会忽视推广资源。我们应该明确地广而告之来招募项目的社区经理、志愿者来做徽标或制作网站等,” Ruff说。 -Budgets can be stretched further by using websites and social media channels to boost your reach. You’ll want to leverage the entire community on these efforts to gain the most audience reach and lighten the workload of keeping information current. +通过使用网站和社交媒体渠道来扩大你的影响力,可以进一步扩大预算。你需要利用整个社区的力量来获得最大的受众范围并减轻保持信息及时更新的工作量。 -> "You need a website -- or you can just do it on GitHub -- but make sure to document your project very clearly on GitHub. A lot of projects are also using Twitter for project promotion," says Ruff. "Community members are also making sure to present and do talks at conferences about the project. They also know how to recognize and celebrate people who are helping, by either sending them a T-shirt or giving them a thank you on the web or on Twitter. There's just a lot of good that you can get out of an engaged community," she says. +> “你需要一个网站 -- 或者你也可以仅仅使用 GitHub 来开展项目 -- 但要确保在 GitHub 上清晰地记录你的项目文档。很多项目也使用 Twitter 进行项目推广,” Ruff 说。 “ 社区成员还确保在有关该项目的会议上发表演讲并进行演示。他们还知道如何表彰和庆祝那些提供帮助的人,可以给他们寄一件T恤,或者在网络或Twitter上向他们表示感谢。你可以从一个活跃的社区中获得很多好处,” 她说。 -### Setting goals +### 设定目标 -Setting goals means spelling out exactly what you want to accomplish. For example, stating "more users" as a goal is not specific enough to measure and determine the level of success you need to accomplish. Give your goal a specific value or a specific outcome that you can measure success against. +设定目标意味着准确地阐明你想要实现的目标。例如,将 “更多用户” 作为目标并不够具体,无法衡量和确定你需要实现的成功程度。给你的目标设定一个具体的数值或可衡量的结果,一以便评估成功与否。 -> "I always go back to users. Look at what you have and then decide perhaps to double the number of users, and then take some of the users and convert them into contributors, and then convert some of the contributors to maintainers," Ruff advises. “You might decide that a goal is to find someone to be a community manager, or someone who will do some of the marketing. The goal can be the growth of the project in that fashion: Users, contributors, roadmap, etc.” +> “我总是回到关注用户这一出发点。看看你拥有什么,然后决定将用户数量增加一倍,然后将一些用户转变为贡献者,然后将一些贡献者转变为维护者,” Ruff建议。 “你可能会设定一个目标是找人担任社区经理,或者做一些推广工作。目标还可以是让项目按照某种方式进行发展:用户、贡献者、路线图等。” -### Measuring success +### 衡量成功 -As the adage goes, you cannot manage what you cannot measure. But neither can you claim success if you cannot validate the claim. By setting specific goals, you’ve determined what your measure. From there, you need to choose the metrics and tools that will help you measure and track your marketing plan’s performance. +俗话说,你无法管理无法衡量的东西。但如果你无法验证目标,你也不能宣称成功。通过设定具体目标,你就确定了衡量标准。以此为基础,你需要选择有助于你衡量和跟踪推广计划绩效的指标和工具。 -You can find metrics and marketing dashboards on Github and in various projects that you can either use as examples or use directly, such as the tools, analytics, and dashboards within the [CHAOSS project](https://chaoss.community/). +你可以在 Github 和各种项目中找到指标和推广仪表板,你可以将其用作示例或直接使用,例如 [CHAOSS 项目]( https://chaoss.community/) 中的工具、分析和仪表板。 -There is an abundance of such tools, and that alone can be overwhelming. Stick to the base metrics that answer your question "how are our marketing efforts performing in terms of project impact?" +此类工具有很多,仅此一项就可能令人不知所措。选择那些基本的度量标准来回答如下问题,“我们的推广工作在项目影响力上表现如何? -You may even be able to use some of the metrics already on your existing project dashboard that you use to manage the project. If your project doesn’t have such a dashboard, or if you rather create one specifically aimed at tracking marketing impact on the project, you may want to use something like [OSS-dashboard](https://github.com/amzn/oss-dashboard) or other commercial tools to do so. +你甚至可以使用现有项目仪表板上已有的一些指标来管理项目。如果你的项目没有这样的仪表板,或者你想创建一个专门用于跟踪项目推广影响的仪表板,你可能选用类似 [OSS-仪表板](https://github.com/amzn/oss-dashboard) 或其他商业工具来操作。 -In other words, use the metrics that are directly related to your stated end goal(s) for the project. The burning question isn’t how many people read your blog or watched your YouTube video, but how many of those people became users and contributors. +换句话说,使用与项目的既定最终目标直接相关的指标。紧迫的问题不是有多少人阅读你的博客或观看你的 YouTube 视频,而是其中有多少人能成为项目的用户和贡献者。 -> "For small projects, the information that they get out of Github may be plenty. It just tells them how many people are downloading their project, how many people have starred their project, how many people are forking it, how many contributors they have, how many issues are pending, how quickly do they resolve issues, all of those things will really give them a fast way to see how they're doing," says Ruff. +> “对于小型项目,他们可以从 Github 获得很多信息。它会告诉他们有多少人在下载他们的项目,有多少人为他们的项目加了星标,有多少人在复制它,他们有多少贡献者,有多少问题悬而未决,他们解决问题的速度有多快,所有这些都让他们能够快速了解自己的进展情况,” Ruff 说。 -## Branding and messaging +## 品牌和信息传递 -Branding your project gives it "stickiness" in the minds of the larger open source and developer communities. It’s a simplified reminder of what your project is and what it can do. It is vital to get your branding message right at the outset because your project will likely suffer a significant setback if you must change the name and brand later. +为你的项目打造品牌可以使其在更大的开源和开发者社区心目中具有“粘性”。它简单地提醒你的项目是什么以及它可以做什么。从一开始就确立好你的品牌信息至关重要,因为如果后来不得不更改名称和品牌,你的项目可能会遭受重大挫折。 -You might want to wait for your project to grow some before you name it or start the branding process. +你可能需要等待你的项目发展起来,然后再为其命名或开始品牌推广过程。 -> "Our company only assigns brand and names to projects that are really big projects for us. If it's a small project, we don't bother doing legal checks or put that much time and effort into branding it because it's just a tiny library or a tiny piece of code," says Ruff. +> “我们公司只为对我们来说真正大的项目指定品牌和名称。如果这还是一个小项目,我们就不会费心做法律检查或花那么多时间和精力来品牌化它,因为它只是一个很小的库或一小段代码,” Ruff说。 -> "But if it's a major project that we're open sourcing, we will go through all that work, so I would give the same guidance to teams. If you're going to go big, you must move to make sure that the name you're using and the brand is available for use, and you're not conflicting with anyone else," Ruff added. +> “但是,如果这是我们开源的一个重大项目,我们将进行所有这些工作,所以我建议团队也这么做。如果你打算做大,就就必须确保所使用的名称和品牌可以使用,并且不会与任何其他人产生冲突,” Ruff 补充道。 -When it’s time to start branding actions in earnest, it’s very important to also leverage the value of the open source brand too, in order to give your new brand a significant boost. +当真正开始品牌行动时,利用开源品牌的价值也非常重要,以便为你的新品牌带来显着提升。 -> "Open source as a brand has a very positive connotation. It says that it's open, it's transparent, it's authentic, it's community-created, it's innovative, it's moving in a fast pace, it gives you a chance as a user to get involved, to see the code, to contribute, to change, to modify the code, all of which users are looking for as opposed to being dependent upon a vendor," says Ruff. +> “开源作为一个品牌具有非常积极的内涵。它代表着开放、透明、真实、社区创建、创新、快速发展,它让你作为用户有机会获得参与、查看代码、贡献、更改、修改代码,所有这些都是用户所寻求的,而不是依赖于供应商,” Ruff 说。 -While leveraging the open source brand is critical, so is protecting the brand’s value. It is essential to uphold the openness, authenticity, and integrity of the brand. Why? Because the brand is a symbol of what people love about open source and specific projects. +虽然利用开源品牌至关重要,但保护品牌价值也同样重要。维护品牌的开放性、真实性和完整性至关重要。为什么?因为该品牌象征着人们对开源和特定项目的热爱。 -You see examples of that in stickers on developer and other community members’ laptops, phones, and even luggage in support of their favorite projects. These stickers are important word-of-mouth catalysts. +你可以在开发人员和其他社区成员的笔记本电脑、手机甚至行李箱上的贴纸上看到这样的例子,他们以此支持他们最喜欢的项目。这些贴纸是重要的口碑催化剂。 -To develop a following that will proudly promote your brand through stickers, or word-of mouth, or by volunteering, you can involve the community in the branding and messaging process before you decide on anything. Getting buy in before you launch a marketing plan is critical to both short-term and long -term success. +要培养一批通过贴纸、口碑或志愿服务自豪地宣传你的品牌的追随者,你可以在做出任何决定之前让社区参与品牌和消息传递过程。在启动推广计划之前获得认可对于短期和长期的成功都至关重要。 -Do make sure that you're clear from a legal perspective on everything from Intellectual Property (IP) laws including copyrights, patents, project name, branding, etc. Some organizations such as The Linux Foundation and non-profits like The Apache Software Foundation can offer some assistance to their respective members regarding the legal issues that need to be addressed. +请确保你从法律角度清楚了解知识产权 (IP) 法中的所有内容,包括版权、专利、项目名称、品牌等。Linux 基金会和 Apache 软件基金会等非营利组织可以就需要解决的法律问题向各自的成员提供一些帮助。 -### Branding and trademark guidelines +### 品牌和商标指南 -A key goal of some open source projects is to prevent technical drift away from a core set of functionality, which is usually accomplished via a conformance program and a set of branding and trademark guidelines. Such compatibility strengthens the ecosystem by providing end users with confidence that data and solutions from one environment can work in another conformant environment with minimal friction. A trademark conformance program, around a particular trademark held by the project, can be used to encourage conformance with the project. Anyone can use the open source project code however they want, but if a downstream solution wants to describe itself as conformant using the project’s conformance trademark, it must meet the project’s definition of conformant. For example, the Kubernetes community has a [community developed](https://github.com/cncf/k8s-conformance) conformance program for the "Kubernetes Certified" program to ensure different Kubernetes products are compatible with each other at some level. +一些开源项目的主要目标之一是防止技术功能偏离核心功能集。这通常可以通过一致性程序和一套品牌和商标指南来实现。这种一致性增强了生态系统的兼容性,并给最终用户带来信心,即来自一个环境的数据和解决方案可以在另一个兼容的环境中以最小的代价正常运行。针对项目的特定商标,商标一致性程序可以用来鼓励遵循项目标准。任何人都可以随心所欲地使用开源项目代码,但如果下游解决方案想要使用项目的一致性合规商标,那么它必须满足项目的一致性合规定义。例如,Kubernetes 社区有一个针对“Kubernetes 认证”计划的[社区开发](https://github.com/cncf/k8s-conformance) 一致性程序,以确保不同的 Kubernetes 产品在某种程度上彼此兼容。 * [https://www.apache.org/foundation/marks/](https://www.apache.org/foundation/marks/) * [https://www.eclipse.org/legal/logo_guidelines.php](https://www.eclipse.org/legal/logo_guidelines.php) @@ -203,45 +203,45 @@ A key goal of some open source projects is to prevent technical drift away from * [https://nodejs.org/en/about/trademark/](https://nodejs.org/en/about/trademark/) * [https://www.openstack.org/brand/openstack-trademark-policy/](https://www.openstack.org/brand/openstack-trademark-policy/) -## Getting the word out +## 传达信息 -### Inside the community +### 社区内部 -The important thing to remember is that you are competing for developers mind share, you're competing with user mind share, against millions upon millions of repos on GitHub. Developers and users can choose to spend their free time work on any open source project that interests them, including other projects and libraries that directly compete or are similar to yours. +需要记住的重要一点是,你正在争夺开发者的注意力,你正在与用户的注意力竞争,与 GitHub 上数以百万计的代码库竞争。开发人员和用户可以选择将空闲时间花在任何吸引他们开源项目上,包括与你的项目直接竞争或类似的其他项目和库。 -It is also critical to raise the profile of your organization within a project and build a solid reputation. This in turn attracts developers to the project and is fundamental in recruiting developers to the organization as well. +提高组织在项目中的形象并建立良好的声誉也很重要。这反过来又吸引了开发人员加入该项目,并且对于招募开发人员加入组织也至关重要。 -Word-of-mouth marketing in the community is foundational to the success of any project and a critical element in raising the profile and reputation of participating members and member companies. Some of the best ways to spark and encourage word-of-mouth activities is by participating and answering questions in the community mailing lists, wikis, forums, and any activities where project members are highly accessible and ready to help. +社区中的口碑推广是任何项目成功的基础,也是提高参与会员和会员公司的形象和声誉的关键因素。激发和鼓励口碑活动的一些最佳方法是参与社区邮件列表、维基百科、论坛以及任何项目成员易于访问并随时准备提供帮助的活动并回答问题。 -It’s also essential to make it easy for new people to get up to speed on the project and contribute freely. Some of the most successful projects do that by operating by a code of conduct so everyone feels welcome and respected. This code of conduct should include: a readme document that clearly explains what the project is; documentation that clearly explains how to get involved, where to make a contribution; a FAQ to answer small or common issues quickly; an outreach effort to help people get involved and help them stay onboard; and, a strong inclusive culture that does not tolerate discrimination or mistreatment of participants. +让新人能够轻松跟上项目进度并自由贡献也很重要。一些最成功的项目通过遵循行为准则来做到这一点,让每个人都感到受欢迎和尊重。该行为准则应包括: 一份自述文件,清楚地解释该项目是什么;清楚解释如何参与、在哪里做出贡献的文档;常见问题解答可快速回答小问题或常见问题;帮助人们参与并帮助他们留在项目的外展活动;以及强大的包容性文化,不容忍对参与者的歧视或虐待。 -Another good way to market internally is to host hackathons and other community events, which could include social meetups. There are successful meetup programs out there like [CNCF Meetups](https://github.com/cncf/meetups) or [NodeJS Meetups](https://nodejs.org/en/get-involved/node-meetups/) programs that you can learn from" +内部推广的另一个好方法是举办黑客马拉松和其他社区活动,也包括社交聚会。有一些成功的聚会计划可以从中借鉴学习,例如 [CNCF 聚会](https://github.com/cncf/meetups) 或 [NodeJS 聚会](https://nodejs.org/en/get-involved/node-meetups/)。 -"Be sure to recognize the loyal contributors and the people who are prolifically contributing, give them T-shirts, invite them to events, recognize them publicly so that you continue to retain them in your project, and show that you care, and you appreciate the work that they're doing," says Ruff. “It's just like managing a team anywhere. You want people to feel respected. You want people to feel included. You want people to feel that their contributions are valued, and that it's a good team to be with.” +“一定要表彰忠诚的贡献者和做出大量贡献的人,给他们T恤,邀请他们参加活动,公开表彰他们,以便继续将他们留在你的项目中,并表明你关心并欣赏他们他们正在做的工作,” Ruff说。 “这就像在任何地方管理团队一样。你希望人们感到受到尊重。你希望人们有被包容的感觉。你希望人们感到他们的贡献受到重视,并且这是一个很好的团队。” -You could also consider creating an "ambassador program" for your project or community. For example, the [Docker Captains](https://github.com/docker-captains/about) and [Cloud Native Ambassadors](https://www.cncf.io/people/ambassadors/) are all examples of programs that empower community members with benefits to help expand the message of your project. +你还可以考虑为你的项目或社区创建一个“大使计划”。例如,[Docker 大师]( https://github.com/docker-captains/about)和[Cloud Native大使](https://www.cncf.io/people/ambassadors/)都是很好的例子,他们为社区成员提供激励,来帮助扩展传播你的项目。 -As previously discussed, good code is not sufficient to make a project successful. Money is often needed to grow a contributor base, sustain the hardware or the infrastructure, cover the hosting costs, or other cost that the project incurs. Donating money to a project also raises a member’s profile and proof of stewardship essential to rising through the ranks. +正如前面所讨论的,好的代码不足以使项目成功。通常需要资金来扩大贡献者群体、维持硬件或基础设施、支付托管成本或项目产生的其他成本。向项目捐款还可以提高会员的形象和证明管理能力,这对于晋升至关重要。 -### Webinars and community meetings +### 网络研讨会和社区会议 -Holding public community meetings where there is a participatory agenda and the meetings are disseminated afterwards is an effective form of marketing. For example, the Kubernetes community holds a frequent [public meeting](https://github.com/kubernetes/community/blob/master/events/community-meeting.md) where everyone is invited to present what they are working on, including newcomers. These meetings are then uploaded to a video service for easy discovery and dissemination. Some organizations also hold webinars on a continuing basis. For example, the CNCF hosts [webinars](https://www.cncf.io/community/webinars/) to benefit its project and member community. +举行公共社区会议,制定参与议程,并在会议后进行传播,是一种有效的推广形式。例如,Kubernetes 社区经常举办[公开会议]( https://github.com/kubernetes/community/blob/master/events/community-meeting.md),邀请每个人展示他们正在做的事情,这其中也包括新人。然后,这些会议将上传到视频服务网站,以便于观看和传播。一些组织还持续举办网络研讨会。例如,CNCF 举办[网络研讨会](https://www.cncf.io/community/webinars/),以使其项目和成员社区受益。 -## Outside the community with events and more +## 社区外的活动及其他 -It is equally important to market outside of the community to attract newcomers to help with your project mission. A prime place to do this type of marketing is at events. Attending, sponsoring, and presenting are all valid and usual marketing tactics. Presenting at an event is a way to refine your message, and can be tailored to the audience. You can also choose to host your own event if your budget allows, this provides a great opportunity to gather developers and users in one place. There are a variety of event hosting companies out there, or you can partner with an organization like the [Linux Foundation](https://events.linuxfoundation.org) to host your event. +在社区外进行推广以吸引新人来帮助你完成项目使命也同样重要。进行此类推广的主要形式是各种活动。出席、赞助和演讲都是有效且常见的推广策略。在活动中进行演示是完善你的信息的一种方式,并且可以根据受众量身定制。如果预算允许,你还可以选择举办自己的活动,这提供了将开发者和用户聚集在一处的绝佳机会。市面上有很多活动主办公司,你也可以与像 Linux 基金会 [Linux基金会](https://events.linuxfoundation.org) 这样的组织合作举办活动。 -Using social media for marketing, both in the context of an event and as a broader communication vehicle, can also be highly effective. Whichever social medium you choose, remember that messages can be multi-purposed. For example, by tweeting a job opening wherein a company also names the open source projects it works with and contributes to, the company can attract job candidates and the project branding can be amplified. Job listings elsewhere can similarly pull extra marketing duty. +使用社交媒体进行推广,无论是在活动中还是作为更广泛的沟通工具,都会非常有效。无论你选择哪种社交媒体,请记住消息可以有多种用途。例如,通过发布一则招聘启事,并同时列出公司与之合作并为之贡献的开源项目,公司既可以吸引求职者,同时也可以提升项目品牌。在其他地方发布的招聘信息同样可以起到额外的推广作用。 -Content, such as blog posts, tutorials, demos, whitepapers, and videos, also plays a critical role in attracting and retaining members. This content can also serve the purpose of sharing information on the project and how to contribute beyond just coding. The more content you have out there, the more people are likely to see and respond. Just be sure the content is current and that outdated material is removed. +博客文章、教程、演示、白皮书和视频等内容在吸引和留住会员方面也发挥着关键作用。此内容还可以用于共享项目信息以及如何在代码以外进行贡献。你拥有的内容越多,看到并做出回应的人就越多。只需确保内容是最新的,并且删除过时的材料。 -Direct marketing, such as emails and online advertising, is also important in external marketing as these enable you to proactively reach out to people who may not have otherwise heard about your project. These can be used to raise awareness, or to promote a specific call to action. Be sure all messaging meets community guidelines and your marketing plan’s criteria. +直接推广(例如电子邮件和在线广告)在外部推广中也同样重要,因为它们可以使你主动接触到可能从未听说过你的项目的人士。这些方法可以用于提高知名度,或者推广特定的行动号召。请确保所有消息传递都符合社区准则和推广计划的标准。 -Another idea for marketing the project for free is SEO (Search Engine Optimization), you can optimize the project page itself or write article that you will optimize that will get visitors to your project. This is described in detail in the article [How to Promote your Open Source Project with SEO](https://itnext.io/seo-for-open-source-projects-1a6b17ffeb8b) +另一个免费推广项目的想法是 SEO(搜索引擎优化),你可以优化项目页面本身,或写文章来进行优化,以吸引访问者访问你的项目。这在文章[如何通过 SEO 推广你的开源项目](https://itnext.io/seo-for-open-source-projects-1a6b17ffeb8b)中有详细描述。 -## Acknowledgements +## 致谢 -**Contributors to this guide:** +**本指南的贡献者: ** * [Amye Scavarda](https://twitter.com/amye) * [Chris Aniszczyk](https://twitter.com/cra) diff --git a/content/zh-CN/guides/measuring.md b/content/zh-CN/guides/measuring.md index e2401b7d..95a91b6c 100644 --- a/content/zh-CN/guides/measuring.md +++ b/content/zh-CN/guides/measuring.md @@ -1,282 +1,305 @@ --- -title: Measuring your open source program's success +title: 度量开源办公室的成功 --- -Open source program managers must demonstrate the ROI of their efforts. This guide provides an overview of some of the standard ways that organizations evaluate their open source programs, projects, and contributions. +开源项目管理者必须展示他们工作的回报率(ROI)。本指南提供了组织评估其开源专项、项目和贡献的一些标准方法的概览。 -Learn what to measure, how to define success, and how to best use this information to advance your open source program objectives, demonstrate effectiveness, and gain support. +了解要度量什么,如何定义成功,以及如何最佳地使用这些信息来推进你的开源专项目标,展示效果,并获得支持。 -**Table of Contents** +**目录** -- [How to define success](#how-to-define-success) -- [Why set goals?](#why-set-goals) -- [How to set goals](#how-to-set-goals) -- [Common goals](#common-goals) -- [What to track](#what-to-track) -- [Other metrics to track](#other-metrics-to-track) -- [Final words](#final-words) -- [Acknowledgements](#acknowledgements) +- [如何定义成功](#如何定义成功) +- [为何设定目标?](#为何设定目标?) +- [如何设定目标](#如何设定目标) +- [常见目标](#常见目标) +- [跟踪什么](#跟踪什么) +- [其他要跟踪的指标](#其他要跟踪的指标) +- [结束语](#结束语) +- [致谢](#致谢) -## How to define success -Smart organizations understand the value of investing in open source development and set goals related to open source use and participation. But every open source program defines success a little differently. The goals you set, and metrics you track, will vary according to the reasons you’re investing in open source – whether it’s to recruit developers, bring in new ideas and technologies through open innovation, achieve faster time to market, lower development costs, or myriad other reasons. +## 如何定义成功 +明智的组织明白投资开源开发的价值,并设定与开源使用和参与相关的目标。但每个开源专项对成功的定义都略有不同。你设定的目标和跟踪的指标将根据你投资开源的原因而有所不同——无论是为了招募开发者、通过开放创新引入新的思想和技术、实现更快的市场上市时间、降低开发成本,还是其他众多原因。 -It’s important to set goals according to your unique strategy – and seek buy-in from the executive team to ensure that the open source strategy aligns with the overall business strategy. That said, there are some standard ways that open source program managers measure success, regardless of their industry, product, or business strategy. These include: +根据你独特的战略设定目标,并从执行团队那里获得支持,以确保开源战略与整体商业战略一致,这是非常重要的。话虽如此,开源专项管理者无论在哪个行业、产品或商业战略中,都有些标准的衡量成功的方法。这些包括: -* Their developers’ participation and level of influence in external open source projects -* Their organization’s reputation in open source communities -* Their ability to recruit and retain talented developers -* The general health of the organization’s own open source projects and the business-critical projects its developers contribute to -* How well they manage open source license compliance +* 他们开发者在外部开源项目中的参与度和影响力水平 +* 他们组织在开源社区中的声誉 +* 他们招募和保留有才华的开发者的能力 +* 组织自己的开源项目及其开发者贡献的关键业务项目的总体健康状况 +* 他们管理开源许可证合规性的能力如何 -## Why set goals? -Before we dive into what an open source program tracks and how to do it, let’s talk for a minute about what you can achieve by setting goals and measuring against them. -First and foremost, tracking progress against your goals helps you make sure the open source projects you’re investing in (whether external or internal) remain healthy – that they are answering to the community, representing the company well, and helping to meet the broader goals of the open source program. Regular tracking can help set benchmarks for open source projects and serve as an early warning system that allows for course correction if a project veers off track, falls out of legal compliance, or simply needs to be retired. +## 为何设定目标? -Careful (and strategic) measurement also makes great fodder for reports to upper management. Regular reporting helps ensure the program stays on track with its goals and the overall business strategy and helps program managers gain internal support for the program among executive leadership (especially if you’re meeting or exceeding those goals!) +在我们深入探讨开源项目跟踪的内容和方法之前,让我们先花一点时间讨论一下通过设定目标并对其进行度量所能实现的成果。 -Facebook’s open source program office, for example, periodically posts the month-over-month results from its open source projects internally and sends an executive report to management. +首先,跟踪与目标的进展有助于确保你投资的开源项目(无论是外部的还是内部的)保持健康——它们能够回应社区的需求,更好地代表公司,并帮助实现开源项目更广泛目标。定期跟踪可以帮助为开源项目设定基准,并作为一个预警系统,允许在项目偏离轨道、不符合法律合规性或需要退役时进行调整。 -> “Reports are just a good way to raise awareness. Even though Facebook places a high value open source (as an organization), it’s still always a good thing to market yourself internally all the time and show your value.” – [Christine Abernathy](https://twitter.com/abernathyca), Open Source Developer Advocate at Facebook. +审慎(和战略性)的测量也是向高层管理人员报告的极好材料。定期报告有助于确保项目与目标和整体业务战略保持一致,并帮助项目经理在执行领导层中获得对项目的内部支持(特别是如果你们正在实现或超过这些目标!) -Publishing the results publicly on a regular basis also helps raise awareness of your organization’s open source activities among potential partners, users, and developers. +>例如,Facebook的开源办公室会定期在内部发布其开源项目的月度成果,并向管理层发送高管报告。 +“报告是提高意识的好方法。尽管Facebook作为一个组织高度重视开源,但始终在内部不断地自我推销并展示你的价值始终是件好事。”——Christine Abernathy,Facebook的开源开发者倡导者。 +定期公开发布结果也有助于提高潜在合作伙伴、用户和开发者对您组织开源活动的认识。 +公开传播结果——好的、坏的和丑陋的——增加了你的项目的透明度、问责性,从而在开源社区增加了可信度。查看 +[Facebook](https://code.facebook.com/posts/1058188987642144/facebook-open-source-2016-year-in-review/) 和 [Google](https://opensource.googleblog.com/2016/10/google-open-source-report-card.html).Googley的示例开源报告卡。 -Getting the word out about results – the good, the bad, and the ugly – increases your program’s transparency, accountability, and thus credibility, in open source communities. See example open source report cards from [Facebook](https://code.facebook.com/posts/1058188987642144/facebook-open-source-2016-year-in-review/) and [Google](https://opensource.googleblog.com/2016/10/google-open-source-report-card.html). -## How to set goals +## 如何设定目标 +对于您的开源专项,拥有崇高的目标是完全可以的,但要为实现这些目标的方式和时间表设定合理的期望。首先,开始度量以建立性能的基线是有帮助的。为收集数据设置正确的工具,并确保数据来源清晰且以您(和您的经理)能够理解的格式。许多组织为他们的开源专项创建了一个指标仪表板,以在一个地方跟踪所有数据,并提供项目快照,这可以帮助快速评估进展。(请参阅我们关于管理开源专项工具的指南。) -It’s OK to have lofty goals for your open source program, but set reasonable expectations for how you will get there and on what kind of timeline. First, it’s helpful just to start measuring to establish a baseline for performance. Set up the right tools for collecting data and make sure the data sources are clean and in a format you (and your manager) can understand. Many organizations create a dashboard of metrics for their open source programs, to track all of the data in one place and provide project snapshots that can help assess progress at a glance. (See our guide on Tools for Managing Open Source Programs.) +![云原生计算基金会的项目仪表板](/img/guides/measuring-your-open-source-program1.png) -![The Cloud Native Computing Foundation’s project dashboard](/img/guides/measuring-your-open-source-program1.png) +接下来,让所有开源专项管理者和利益相关者聚集在一起——在Facebook,这包括工程领导和项目维护者——作为一个团队决定在接下来的3-6个月(小的、可实现的增量)里你想要达到的目标。在那个时间段结束时,回顾你的表现,并根据上一次的进展调整下一次的目标和策略。 -Next, get all of the open source program managers and stakeholders together – at Facebook, this includes the engineering leads and project maintainers – and decide as a group where you want to go over the next 3-6 months (small, achievable increments). At the end of that time period, look back at how you did and adjust goals and tactics for the next pass, based on the previous pass. +>“我倾向于基于社区感受到的痛苦找到指标,并尝试改善这些指标以改善社区健康。”——Sarah Novotny,Google的Kubernetes社区经理。 -> “I tend to find metrics based on what the community is feeling as pain, and try to change those metrics for the better to improve the community health.” – [Sarah Novotny](https://twitter.com/sarahnovotny), Kubernetes Community Manager at Google. +除了基线性能指标外,以下是您在为项目设定目标时需要考虑的一些其他事项: -In addition to the baseline performance metrics, here are some more things to consider as you’re setting goals for your program: +* **战略一致性:** 您的目标是否与核心业务战略、产品目标和其他内部业务目标一致? +* **控制水平:** 您的项目经理是否对结果有直接控制,还是说这属于工程、法律或其他功能?设定在您的控制范围内且可实现的目标。 +* **项目差异:** 目标可以根据项目的目的、社区组成、技术栈和其他变量而有所不同。例如,Facebook注意到其JavaScript项目往往更频繁地被分叉。他们已经学会(经过多次跟踪周期!)这些指标并不一定是这类项目健康状况的最佳指标。 +* **数量与质量:** 并非所有目标都应该与数字挂钩。提升项目质量的流程改进同样重要,甚至更重要。仅仅因为你达到了所有的数字,并不一定意味着你的项目是健康的。相反,一个不增长的非常小的项目也可能非常健康。 +“你可能有半打核心贡献者和一打活跃但不是维护者的人,但有健康的讨论,拉取请求在很短的时间内得到处理,繁重的功能讨论有一个清晰的开始、中间和结束。这可能是一个非常健康的社区,但它不会在GitHub上获得数百万的星星或分叉,因为它可能是一个小众项目,”Novotny说。“所以我倾向于看社区是如何与自身互动的,新的领导是如何被培养和指导的,以及任何痛点是如何发展的。” -* **Strategy alignment:** Do your goals align with core business strategy, product goals, and other internal business goals? -* **Level of control:** Do your program managers have direct control over results, or does that live with engineering, legal, or some other function? Set goals that are achievable, within your control. -* **Project variation:** Goals can and should vary by project, depending on its purpose, community composition, technology stack, and other variables. For example, Facebook has noticed that its Javascript projects tend to be forked more often. They’ve learned (after many cycles of tracking!) these metrics aren’t necessarily the best indicators of project health for this type of project. -* **Quantity vs. quality:** Not all goals should be tied to a number. Process improvements that boost the quality of your projects are just as important, if not more so. Just because you’re hitting all the numbers, doesn’t necessarily mean your projects are healthy. Conversely, a very small project that’s not growing could also be extraordinarily healthy. -“You could have a half-dozen core contributors and a dozen people who are active but not maintainers, but there are healthy discussions, and pull requests are handled in a short manner, and ponderous feature discussions have a clear beginning, middle, and end. That might be an incredibly healthy community, but it’s not going to have the gazillion stars or forks on GitHub, because it may be a niche project,” Novotny says. “So I tend to look at how the community is interacting with itself, how new leadership is being grown and mentored, and how any pain points are evolving.” -## Common goals +## 常见目标 -When it comes to measuring your open source program’s success, it’s tempting to focus on the quantitative metrics for your projects: total number of contributors, lines of code, number of projects, etc. We’ll discuss what to measure to assess your project health in the next section. But first there are many other important ways to measure your program’s success than strictly by these numbers. -> “I think using metrics as a way to inform the trend is good. Using them as the only method of success leads you to trouble.” – [Joe Beda](https://twitter.com/jbeda), a founding engineer of Kubernetes at Google and Co-founder and CTO at Heptio. +当谈到度量您的开源专项的成功时,很容易就会专注于项目的定量指标:贡献者总数、代码行数、项目数量等。在下一节中,我们将讨论如何通过这些指标来评估您项目的健康状况。但首先,除了这些数字之外,还有很多其他重要的方法来衡量您项目的成功的。 -Kubernetes is one of the highest velocity open source projects on GitHub, attracting more than 80,000 commits from 2,760 developers at 1,181 companies over the last three years. But from the start, the project has managed its success in terms of whether its users were excited about the technology and using it, not by “some list of open source metrics,” Beda said. +>“我认为使用指标来了解趋势是好的。如果把它们作为唯一的成功方法,就会带来麻烦。”—[Joe Beda](https://twitter.com/jbeda),Google Kubernetes的创始工程师和Heptio的联合创始人兼CTO。 -Below are some of the common goals behind an open source program office, and the top ways that program managers measure against these goals to track the overall progress of the program. Some of these goals can’t be measured, per se, but are about improving processes, efficiencies and quality. Others can be measured by conducting surveys or other methods of assessment such as regularly, and actively soliciting verbal or written feedback. (Talk to your team!) +Kubernetes是GitHub上速度最快的开源项目之一,在过去三年中吸引了来自1,181家公司的2,760名开发者的超过80,000次提交。但从一开始,这个项目就根据用户是否对这项技术感到兴奋并使用它来衡量其成功,而不是通过“一些开源指标列表”,Beda说。 -### Goal 1: Ensure the efficient and legally compliant use of open source code. +以下是开源办公室背后的一些常见目标,以及项目经理用来衡量这些目标的顶级方法,以跟踪项目的整体进展。其中一些目标无法确切地衡量,而是关于提高流程、效率和质量。其他目标可以通过进行调查或其他评估方法来衡量,例如定期和积极地征求口头或书面反馈。(与您的团队交流!) -This is where organizations typically start when they get involved in open source. They realize engineering is consuming a lot of open source software either in their infrastructure, or in their products and services, or both. A program office helps centralize policies and decision-making around open source consumption, track its use, and ensure the organization doesn’t run afoul of its legal obligations under the various open source licenses. Programs can also keep track of how well they help developers resolve any legal issues they may encounter. -Some of the most common ways to measure against this first goal are aimed at ensuring that policies and processes are working the way they were intended and that the organization remains in legal compliance: +### 目标1:确保高效且合法合规地使用开源代码。 -* How much open source code do you consume? -* How well is that consumption tracked? -* The policy for using open source code is clear and developers are aware of it. -* The processes and tools for bringing in code is clear and developers are following it. -* Which products and services are third-party code being used in? -* How many compliance issues are you having and how quickly are they resolved? (You do you have a compliance program, right? See our legal resources from the [Open Compliance Program](https://compliance.linuxfoundation.org/) for more on this topic.) +这通常是组织开始参与开源活动的地方。他们意识到工程部门正在大量使用开源软件,无论是在他们的基础设施中,还是在他们的产品与服务中,或两者兼有。一个项目办公室有助于集中化有关开源使用的政策和决策,追踪其使用情况,并确保组织不会违反各种开源许可证下的法律义务。项目还可以跟踪它们在帮助开发者解决可能遇到的任何法律问题方面的成效。 -### Goal 2: Increase developer productivity. +针对这一首要目标的一些最常见衡量方法旨在确保政策和流程按预期工作,并确保组织保持合法合规: -Once you’re tracking and managing your open source use, you’ll want to make it easier for developers to contribute to open source projects. If your engineers have to go through layers of red tape to submit a bug fix or new feature to a project that your business depends on, you’re wasting precious time and resources. Developers also save considerable time over the long run by contributing upstream, rather than maintaining a separate fork of the project which accrues technical debt over time. +* 您使用了多少开源代码? +* 这种使用情况被追踪得有多好? +* 使用开源代码的政策清晰,开发者对此有所了解。 +* 引入代码的流程和工具清晰,开发者正在遵循它。 +* 哪些产品与服务中使用了第三方代码? +* 您遇到了多少合规问题,它们是如何解决的有多快?(您有合规计划,对吧?请参阅我们的[开源合规计划](https://compliance.linuxfoundation.org/)的法律资源,了解更多关于这个话题的信息。) -> “We try to set ourselves up to be like those people on the marathon route who give water to the runners. We encourage the developers to take a couple of extra steps in our direction knowing that by doing so they actually will get to their goal in the long run. We really try to set up a program to be a support service, not a speed bump.” – [Gil Yehuda](https://twitter.com/gyehuda), Senior Director of Open Source at Oath (Yahoo + AOL) +## 目标2:提高开发者的生产力。 -Metrics related to this goal are aimed at greasing the wheels for developers to contribute back to open source projects, as well as increasing the overall amount of code your organization contributes back upstream. Once you remove barriers to contribution and make the approval process clear and quick, you can expect more contributions and efficiencies. Things to track include: +一旦您开始追踪和管理您的开源使用情况,您就会希望让开发者更容易地为开源项目做出贡献。如果您的工程师需要经过层层繁文缛节才能向您的业务所依赖的项目提交错误修复或新功能,那么您就是在浪费宝贵的时间和资源。从长远来看,开发者通过向上游贡献代码,而不是维护一个随时间累积技术债务的项目分支,也能节省大量时间。 -* Number of commits made to external projects identified as strategic to the organization -* Number of developers contributing. Also, who are they and which projects do they contribute to? -* Number of project maintainers employed by the organization (hired and grown) -* Project health for the projects you contribute to -* Sentiment analysis: your organization’s reputation in open source communities -* Are developers aware of the policy for contributing? (You have one, right?) -* Do they follow the process for contributing? (ie must they sign a CLA, etc.) -* Do they ask you for help and are you prompt in providing it? -* Amount of time between software releases – is it increasing or decreasing? -* What are the engineering costs associated with contributing upstream vs. maintaining forked code? +"我们试图让自己像马拉松赛道上给跑步者送水的人。我们鼓励开发者朝我们的方向多走几步,知道这样做他们实际上最终会达到目标。我们真的试图设置一个程序,成为一个支持服务,而不是减速带。"— [Gil Yehuda](https://twitter.com/gyehuda),Oath(雅虎+美国在线)的开源高级总监 -### Goal 3: Create and grow open source projects. +与此目标相关的指标旨在为开发者贡献回开源项目提供便利,并增加您的组织向上游贡献的代码总量。一旦您消除了贡献的障碍,并使审批过程明确且快速,您可以期待更多的贡献和效率。需要跟踪的事项包括: -This is the primary goal of many open source programs at large, engineering-focused organizations such as Facebook,Google, Microsoft, Twitter, and many others. They’re creating hundreds (or even thousands) of open source projects that aim to solve hard technology problems. The goal is to attract outside users and contributors who bring in new ideas and help advance the technology at a faster pace – a concept University of California, Berkeley, professor Henry Chesbrough calls [open innovation](https://hbr.org/2003/07/a-better-way-to-innovate). +* 对组织认为具有战略意义的外部项目所做的提交数量 +* 贡献的开发者数量。他们是谁,他们贡献了哪些项目? +* 组织雇佣的项目维护者数量(招聘和培养) +* 您贡献的项目的健康状态 +* 情感分析:您的组织在开源社区中的声誉 +* 开发者是否知道贡献的政策?(您有一个,对吧?) +* 他们是否遵循贡献的流程?(例如,他们是否必须签署CLA等) +* 他们是否向您求助,您是否及时提供帮助? +* 软件发布之间的时间——是在增加还是减少? +* 与维护分支代码相比,向上游贡献的工程成本是多少? -> “How do you actually get the smartest people in the world working at your company? Well, you open-source stuff and then you convince them to contribute to your projects!” – [Chris Aniszczyk](https://twitter.com/cra), Executive Director of the Open Container Initiative and COO of the Cloud Native Computing Foundation -The many data points available to measure project health are key to tracking against this goal (see the top 5 in the next section). But there are other considerations as well: +### 目标3:创建和培养开源项目。 -* Is there a clear policy for creating new open source projects and are developers aware of it? -* Is there a clear and easy process for creating new projects and are developers following it? -* How easy is it for outsiders to contribute to your organization’s projects? -* Project maintainers are welcoming and helpful -* Projects are well-maintained and supported -* Code is well documented -* How to contribute is well-defined -* Other quantitative metrics such as number of new contributors, number of issues created, amount of time it takes to close issues, etc. (see the next section) - * Number and diversity of external contributions your projects receive - * Popularity of your organization’s projects: GitHub stars, social media followers, etc. - * Number of users in deployment and/or production - * Number, breadth, and quality of projects your organization launches. For example, mobile or data infrastructure-related projects, etc. - * Performance increases in your project and related product - * Time between releases +这是许多以工程为重点的大型组织(如Facebook、Google、Microsoft、Twitter等)开源专项的主要目标。他们正在创建数百(甚至数千)个旨在解决棘手技术问题的开源项目。目标是吸引外部用户和贡献者带来新的想法,并帮助以更快的速度推进技术——加州大学伯克利分校教授Henry Chesbrough将这一概念称为[开放式创新](https://hbr.org/2003/07/a-better-way-to-innovate)。 -> “During one half we decided that we wanted to have more flagship projects that get launched and make it a little bit more of a rigorous process in terms of what we open source. But there were no numbers behind that. It just meant revisiting the process of how open source projects were launched.” – Christine Abernathy, Facebook. +> “你如何让世界上最聪明的人在你公司工作?嗯,你开源一些东西,然后说服他们为你的项目做出贡献!”—[Chris Aniszczyk](https://twitter.com/cra),开放容器倡议的执行董事和云原生计算基金会的首席运营官 -### Goal 4: Recruit and retain developers. +衡量项目健康可用的众多数据点是跟踪这一目标的关键(见下一节的前5名)。但还有其他考虑因素: -Participating in and creating open source projects as an organization is a great way to attract developers – and onboard them quickly, with fewer resources devoted to training. Developers who use or contribute to your projects will already be familiar with your processes, tools, and technologies when they join the organization. (See our guide on Recruiting Open Source Developers.) +* 是否有明确的创建新开源项目的政策,开发者是否知道? +* 是否有创建新项目的明确且简便的流程,开发者是否遵循? +* 外部人员对您组织的项目做出贡献有多容易? +* 项目维护者热情且乐于助人 +* 项目维护良好且得到支持 +* 代码有良好的文档记录 +* 如何贡献定义明确 +* 其他定量指标,如新贡献者数量、创建的问题数量、关闭问题所需的时间等(见下一节) +* 您的项目收到的外部贡献的数量和多样性 +* 您组织项目的受欢迎程度:GitHub星标、社交媒体关注者等 +* 在部署和/或生产中使用的用户数量 +* 您组织启动的项目的数量、广度和质量。例如,与移动或数据基础设施相关的项目等 +* 项目及其相关产品的性能提升 +* 发布之间的时间 +> “在上半部分,我们决定我们希望有更多的旗舰项目启动,并使开源过程更加严谨。但那背后没有数字。这只是意味着重新审视如何启动开源项目的过程。”—Christine Abernathy,Facebook。 -But chances are that you as a program manager will not have a direct role in recruiting developers, and it may not be clear what immediate effect your organization’s open source participation has on hiring. To help make a more direct connection between program efforts and recruiting, Facebook conducts a biannual survey which asks new hires three basic questions: -* Are they aware of the company’s open source program? -* How did that awareness influence their decision to join the company? -* Does their experience with open source apply to the work that they are doing now? +### 目标4:招募和保留开发者。 -> “We use the survey to measure the health of our open source culture and it speaks to the overall effectiveness of how people view our open source projects. It’s good to know the numbers trend upwards.” – [Christine Abernathy](https://twitter.com/abernathyca), Open Source Developer Advocate at Facebook. +作为一个组织参与和创建开源项目是吸引开发者的绝佳方式——并且可以快速地让他们入职,同时减少培训所需的资源。使用或为您的项目做出贡献的开发者在加入组织时已经熟悉您的流程、工具和技术。(请参阅我们关于招募开源开发者的指南。) -Other common metrics for developer recruitment include: +但作为项目经理,您可能没有直接参与招募开发者的角色,并且可能不清楚您组织参与开源对招聘的直接效果。为了帮助更直接地连接项目工作和招聘,Facebook进行了半年一次的调查,询问新员工三个基本问题: -* Which open source projects employees use and contribute to -* How new recruits heard about the organization -* The number of developers you’re bringing on through open source projects -* How many project maintainers you recruit (and grow) -* How long it takes to onboard new hires -* How open source developers are advancing in their careers -* Developer contributions are assessed as part of job performance -* Developers are recognized and rewarded for contributions -* Developers receive help and support in contributing +* 他们是否知道公司的开源专项? +* 这种意识如何影响他们加入公司的决定? +* 他们对开源的经验是否适用于他们现在所做的工作? +“我们使用调查来衡量我们开源文化的健康程度,它反映了人们如何看待我们的开源项目的总体有效性。很高兴看到数字呈上升趋势。”—[Christine Abernathy](https://twitter.com/abernathyca),Facebook的开源开发者倡导者。 -### Goal 5: Promote open source culture. +开发者招聘的其他常见指标包括: -A lot of how open source programs contribute to engineering talent also comes down to cultivating the culture and practice of open source within your organization. That’s because organizations that embrace open source are known as good places for developers to work and innovate. Open source program managers are often ambassadors for an open source ethos within their organizations, as well as overseeing the policies and practices for collaboration. +* 员工使用和贡献的开源项目 +* 新员工是如何听说组织的 +* 您通过开源项目招募的开发者数量 +* 您招募(和培养)的项目维护者数量 +* 新员工入职所需的时间 +* 开源开发者在职业生涯中的晋升情况 +* 开发者的贡献作为工作表现的一部分进行评估 +* 开发者因其贡献而获得认可和奖励 +* 开发者在贡献方面获得帮助和支持 -It’s important to track how open source culture advances within your organization to measure your program’s effectiveness. Some common ways to measure adoption of open source culture include: -* Awareness of and support for the open source strategy and program among management and individual contributors across all departments, from engineering to marketing and public relations -* Branding and awareness in open source communities – how your organization is perceived -* Participation – you are participating actively in open source communities in a positive way. -* Training and mentorship – you work with developers to improve their open source contributions and projects, find opportunities to contribute, and learn the tools and processes of open source communities, ensure that contributors receive support from their peers and managers -* Adoption of a common toolset -* Code quality is acceptable for open source/external consumption -* Advocating on behalf of the organization – attending and speaking at conferences, writing articles or tutorials, etc. -* Sponsoring foundations, groups, or hackathons -### Goal 6: Align open source community interests with product interests. +### 目标5:推广开源文化。 -Community advocacy is a fairly new, but increasingly popular, role in open source programs. You will often act as a liaison between your projects’ developer and adopter communities – representing the voice of external users building on your open source code and funneling information back to the product management team. +开源专项对工程人才的贡献很大程度上也归功于在组织内培养开源文化和实践。这是因为拥抱开源的组织被认为是开发者工作和创新的好地方。开源专项经理通常是组织内开源精神的大使,同时监督协作的政策和实践。 -This is an important role that ensures your products and services are benefiting from your open source communities, and thus that your open source program stays in line with the organization’s broader business strategy and objectives. Some metrics to track success in your advocacy include: +跟踪开源文化在组织内的发展对于衡量项目的有效性至关重要。一些常见的衡量开源文化采纳的方法包括: -* How many contributions are coming from outside the organization? -* How many full-time contributors are outside your organization? -* How much externally contributed code is making it back into products? -* How many hires are coming from open source contributions? +* 管理层和各部门(从工程到市场营销和公共关系)对开源战略和项目的认识和支持 +* 在开源社区中的品牌和知名度——您的组织是如何被感知的 +* 参与度——您以积极的方式参与开源社区 +* 培训和指导——您与开发者合作,提高他们对开源的贡献和项目,寻找贡献的机会,并学习开源社区的工具和流程,确保贡献者从他们的同事和经理那里得到支持 +* 采用通用工具集 +* 代码质量符合开源/外部使用的标准 +* 代表组织倡导——参加和在会议上发言,撰写文章或教程等 +* 赞助基金会、团体或黑客马拉松 -## What to track -There are many ways to measure success and track progress for open source programs. Project health isn’t the only thing to track, but it’s still very important. The problem is, there is so much data available around open source projects. Anything you can get data on, you can collect and track. Again, the metrics each organization tracks – and what they do with the data – depends heavily on its own goals for the program, and its unique challenges in the market and in the open source community. -> “We gather the data that we can because that data is available but we don’t live in the numbers. We live in ensuring we have the right outcomes.” – [Gil Yehuda](https://twitter.com/gyehuda), Senior Director of Open Source at Oath (Yahoo + AOL) +### 目标6:将开源社区利益与产品利益对齐。 -For some (crazy or fully automated) program managers the answer is just to track all the things. But for large organizations in particular, there are so many projects it would be impossible to track everything and be able to make any sense out of it. So what are the real indicators of an open source project’s health? +社区倡导是开源专项中一个相当新但日益流行的角色。您经常充当项目开发者和采用者社区之间的联络人——代表基于您的开源代码构建产品的外部用户的声音,并将信息反馈给产品管理团队。 -Here are the top metrics for assessing overall project health in your open source program. These are only a starting point for more rigorous and thoughtful analysis. Keep in mind that these are the tips for helping program managers responsible for ensuring the health of multiple projects. The projects themselves should also track their own metrics for health. [GitHub’s guide on open source metrics](https://opensource.guide/metrics/) gives a great overview of what project maintainers should pay attention to. +这是一个重要角色,确保您的产品与服务从您的开源社区中获益,从而使您的开源专项与组织更广泛的商业战略和目标保持一致。一些衡量您倡导成功的指标包括: -These numbers are easily collected from GitHub using free and open source tools, as well as commercial offerings. Measure them at regular intervals (monthly, quarterly, and annually) to help benchmark progress for individual projects, as well as rolled up into aggregate counts for the program as a whole. Use them in reports to management, and to help your developers improve your projects. +* 来自组织外部的贡献有多少? +* 组织外部的全职贡献者有多少? +* 有多少外部贡献的代码被重新整合到产品中? +* 有多少员工是从开源贡献中招聘来的? -> “We periodically just try to check and see, are the projects healthy or not, and just give them advice on what they should do better. But we don’t directly manage. We just give them the data and then sort of nudge them when we can, or when we have to.” -[ Christine Abernathy](https://twitter.com/abernathyca), Facebook. -### Number of contributors (and the ratio of external to internal contributions) -Projects start with the majority of contributions coming from internal developers and evolve to include more outside contributions as the source code is used or forked. The healthiest projects that are sustainable over time have extremely diverse communities with the bulk of contributions coming from other companies in the project ecosystem that have taken commercial dependencies on that code. (Remember the 1,000+ companies contributing to Kubernetes?) +### 需要跟踪的内容 -Projects that are consistently attracting new external contributors are likely doing a good job maintaining the project, welcoming contributors, and incorporating feedback from the community. (Note: This may still be true for projects that aren’t growing their contributor base!) +对于开源专项来说,衡量成功和跟踪进展的方法有很多。项目健康不是唯一需要跟踪的方面,但它仍然非常重要。问题在于,围绕开源项目有大量的数据可用。任何可以获得数据的方面,都可以收集和跟踪。再次强调,每个组织跟踪的指标——以及他们如何使用这些数据——在很大程度上取决于他们对项目的目标,以及他们在市场和开源社区中所面临的独特挑战。 -![Kubernetes contributors (git-author) over time](/img/guides/measuring-your-open-source-program2.png) +>“我们收集我们能够获取的数据,因为我们有这些数据,但我们不只关注数字。我们关注的是确保我们有正确的结果。”—[Gil Yehuda](https://twitter.com/gyehuda),Oath(雅虎+美国在线)的开源高级总监 -### Number of pull requests submitted, open, and accepted (and length of time they remain open) +对于一些(疯狂或完全自动化的)项目经理来说,答案是跟踪所有事物。但对于大型组织来说,特别是有那么多项目,跟踪一切并从中得出任何意义是不可能的。那么,真正表明一个开源项目健康状况的指标是什么呢? -When a contributor finds a bug or has a feature request that they can (and have clearance to) patch or write themselves, they do so and submit it as a pull request (PR). Tracking the number of pull requests, and what happens with them, demonstrates how much code is being submitted by contributors outside of your employ and is thus an indicator of the level of outside interest in your projects. +以下是评估你开源专项整体健康状况的顶级指标。这些只是更严格和深思熟虑分析的起点。请记住,这些是帮助负责确保多个项目健康状况的项目经理的提示。项目本身也应该跟踪自己的健康指标。[GitHub的开源指标](https://opensource.guide/metrics/)指南为项目维护者应该关注什么提供了很好的概述。 -![Kubernetes tracks open and closed pull requests over time using Bitergia Analytics.](/img/guides/measuring-your-open-source-program3.png) +这些数字可以很容易地使用免费和开源的工具,以及商业产品从GitHub收集。定期(每月、每季度、每年)测量它们,以帮助为个别项目以及整个项目的总体进展设定基准。在管理报告中使用它们,并帮助您的开发者改进您的项目。 -The length of time PRs remain open also indicates how responsive and welcoming your project maintainers are to outside contributors. If a PR sits for too long without response, potential contributors may take their good ideas elsewhere. +>“我们定期尝试检查并看看,项目是否健康,以及给他们一些建议,告诉他们应该如何做得更好。但我们不直接管理。我们只是给他们数据,然后在我们能够或必要时,稍微推动他们。”—{Christine Abernathy}(https://twitter.com/abernathyca),Facebook。 -> “When we have a good project, we probably don’t have a pull request that’s open for more than, I would say, two to three months at most. And that’s actually a lot.” – Christine Abernathy, Facebook. -Keep in mind that these metrics are highly dependent on the size of the project. Facebook’s smaller projects will try to keep the number of open pull requests at 10 or less. But keeping PRs at this limit would be challenging for bigger projects that have a lot of community input compared to the number of maintainers. Reviewing those pull requests takes time so bigger projects tend to have longer open PRs. +### 贡献者数量(以及外部与内部贡献的比例) -Facebook’s open source office frequently runs queries in the database and picks the top five projects with the most open PRs. They pinpoint a few issues and then take the opportunity to open up a dialogue with the project’s maintainers. They ask them a couple of questions to get to the root of the issue and see what might help solve the problem. More often than not, it’s simply a matter of refocusing their attention and reminding them that it’s important to keep the community happy. But occasionally, digging into the numbers points to deeper problems with a project. A lot of open PRs, or old PRs, could mean that only one or two people are maintaining the project – a potential red flag. +项目起初大多数贡献来自内部开发者,并随着源代码的使用或分叉逐渐包括更多的外部贡献。那些能够持续吸引多样化社区的、健康的项目,其大部分贡献来自项目生态系统中对代码有商业依赖的其他公司。(还记得有1000多家公司为Kubernetes贡献代码吗?) -### Number of issues submitted (and length of time they remain open) +那些持续吸引新外部贡献者的项目,很可能在维护项目、欢迎贡献者和整合社区反馈方面做得很好。(注意:对于那些没有扩大贡献者基础的项目,这可能仍然成立!) -Users who do not have the time, permission, or ability to submit a pull request, but encounter problems with your code can submit their bugs and feature requests as an issue. The number of issues, and how they are addressed, can indicate your projects’ levels of user adoption as well as how responsive maintainers are to user needs. +!["Kubernetes贡献者(git作者)随时间变化](/img/guides/measuring-your-open-source-program2.png) -This number depends, of course, on how issues are tracked. For a project that’s only using GitHub to track bugs, issues are probably going to stay open for a much shorter time than a project that’s using GitHub for issues that include feature requests. These considerations drag down or drag up the issues' age. -![Kubernetes issues opened and closed over time](/img/guides/measuring-your-open-source-program4.png) -### Number of commits per contributor (external vs. internal) +### 提交、开启和接受的拉取请求数量(以及它们保持开启状态的时间长度) -The number of external commits a project has relative to the total is another indication of how effective the project is at innovating in the open – bringing in new ideas from the outside. Healthy projects will see the ratio of external contributors increase over time. Measuring the number of commits per contributor also helps to assess whether your projects are attracting new contributors and if those new contributors stick around. +当一个贡献者发现一个错误或者有一个他们能够(并且有权限)修补或编写的功能请求时,他们会这样做并提交一个拉取请求(PR)。跟踪拉取请求的数量以及它们的处理情况,展示了多少代码是由非雇员的贡献者提交的,因此这是衡量外部对您项目兴趣水平的一个指标。 -### Number of external adopters +![Kubernetes使用Bitergia Analytics随时间追踪开启和关闭的拉取请求](/img/guides/measuring-your-open-source-program3.png) -Each open source project should have a way to track organizations that opt to adopt the software in a production environment. Whether it’s through an ADOPTERS.md file or a simple list in the README, the key thing is to track this list and ensure it grows over time. If the number of external adopters stops growing or shrinks, it can signal everything from project maturity to project obsolescence. +PR保持开启状态的时间长度也表明了您的项目维护者对外部贡献者的反应速度和欢迎程度。如果一个PR长时间未得到回应,潜在的贡献者可能会将他们的好想法带到其他地方。 -### Number of projects created or contributed to (program-wide) +>“当我们有一个好项目时,我们可能没有拉取请求开启超过最多两到三个月。实际上,这已经很长了。”— Christine Abernathy,Facebook。 -Track these metrics for each project your organization releases, but also the projects your developers are actively contributing to. In the process of creating your open source strategy, you should have identified the business-critical projects your organization is using and earmarked some investment for contributing to those projects. It’s important to measure your organization’s open source success not only by the health of your own open source projects but by its open source activity as a whole. This includes the health of the projects you rely on for product development and business operations, as well as ensuring your organization is legally compliant with the open source licenses of any projects you do use or release. (See our [Open Compliance Program publications](https://compliance.linuxfoundation.org/references/compliance-related-publications).) +请记住,这些指标高度依赖于项目的大小。Facebook的小型项目会尽量保持开启的拉取请求数量在10个或更少。但对于有大量社区输入的大型项目来说,与维护者的数量相比,保持PR在这个限制之内将是具有挑战性的。审查这些拉取请求需要时间,所以大型项目往往有更长时间的开启PR。 -## Other metrics to track +Facebook的开源办公室经常在数据库中运行查询,并挑选出开启PR最多的前五个项目。他们确定几个问题,然后借此机会与项目的维护者开展对话。他们向他们提出几个问题,以找到问题的根源,并看看什么可能有助于解决问题。大多数情况下,这只是重新集中他们的注意力,并提醒他们保持社区满意的重要性。但偶尔,深入研究这些数字会指向项目的更深层次问题。许多开启的PR,或者旧的PR,可能意味着只有一两个人在维护项目——这是一个潜在的红旗。 -The basic project metrics are a good starting point to get your thumb on the pulse of your open source contributions. But successful program managers require a deeper dive into other important metrics. -Here are a multitude of other things you can and maybe should be tracking, depending on your goals. Remember that the number itself isn’t the goal – it’s the process of tracking them over time and finding patterns in the data that can inform project and process improvements. Measure for each project, and across projects for a comprehensive view of your program’s output and results. -* Popularity/awareness - * Visitors to the project website - * Total number of followers on GitHub/GitLab - * Number of followers on social media accounts such as Twitter, Facebook, or LinkedIn - * News clips and media mentions - * Number of meetups organized and hosted (e.g., via meetup.com) -* Influence - * Number of employees in a maintainer/leadership role in your strategic projects -* Diversity of contributors to your projects -* Patches rejected, and why -* Adoption - * Number of downloads - * Number of forks created - * Number of contributing external companies - * Stages of adoption (# of deployments in PoC and production) - * Number and quality of commercial dependencies (products) – This can be tracked by looking at the companies contributing to your projects, as well as following the news and trade press. -* Program costs - * Staff: engineering, PR & marketing, legal - * Infrastructure and support - * Tools - * Conference attendance and travel - * Training - * Memberships and donations +### 提交的问题数量(以及它们保持开启状态的时间长度) -## Final words +没有时间、权限或能力提交拉取请求,但遇到代码问题的用户可以将他们的漏洞和功能请求作为问题提交。问题的数量以及它们是如何处理的,可以表明项目的使用者采纳程度以及维护者对用户需求的反应速度。 -Organizations evaluate their open source programs, projects, and contributions in whatever way makes the most sense for their needs. The most important thing to remember is to set a strategy and incremental goals to achieve it. What you track, and how, will naturally follow. +这个数字当然取决于问题是如何跟踪的。对于仅使用GitHub来跟踪错误项目,问题可能保持开启的时间要比使用GitHub跟踪包括功能请求在内的问题的项目要短得多。这些考虑因素会影响问题年龄的延长或缩短。 -## Acknowledgements +![Kubernetes随时间开启和关闭的问题](/img/guides/measuring-your-open-source-program4.png) -Contributors: -* [Christine Abernathy](https://twitter.com/abernathyca), Open Source Developer Advocate at Facebook. -* [Chris Aniszczyk](https://twitter.com/cra), COO of the Cloud Native Computing Foundation. -* [Joe Beda](https://twitter.com/jbeda), Founding Engineer of Kubernetes at Google and Co-founder and CTO at Heptio. -* [Sarah Novotny](https://twitter.com/sarahnovotny), Kubernetes Community Manager at Google. -* [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), Senior Director of Open Source at Oath (Yahoo + AOL) + +### 每个贡献者的提交数量(外部与内部) + +项目相对于总数拥有的外部提交数量是另一个表明项目在开放创新方面效果如何的指标——即从外部引入新想法。健康的项目将看到外部贡献者的比例随时间增加。测量每个贡献者的提交数量也有助于评估您的项目是否吸引了新贡献者,以及这些新贡献者是否持续参与。 + + + +### 外部采用者数量 + +每个开源项目都应该有一种方法来跟踪选择在生产环境中采用该软件的组织。无论是通过一个ADOPTERS.md文件,还是在README中的简单列表,关键是要跟踪这个列表,并确保它随时间增长。如果外部采用者的数量停止增长或减少,这可能预示着项目成熟或项目过时。 + + + +### 创建或贡献的项目数量(整个项目) + +为您的组织发布的每个项目跟踪这些指标,同时也要跟踪您的开发者积极贡献的项目。在制定开源策略的过程中,您应该已经确定了对业务至关重要的项目,并为贡献给这些项目划拨了一些投资。衡量您的组织开源成功的不仅仅是通过您自己的开源项目的健康程度,还要通过其整体的开源活动来衡量。这包括您依赖于产品开发和业务运营的项目的健康程度,以及确保您的组织在法律上符合您使用或发布的任何项目的开源许可证。([请参阅我们的开源合规计划出版物](https://compliance.linuxfoundation.org/references/compliance-related-publications)。) + + + + ### 其他需要跟踪的指标 + +基本的项目指标是了解您开源贡献情况的良好起点。但成功的项目经理需要更深入地研究其他重要指标。 + +根据您的目标,以下是您可以(也许应该)跟踪的众多其他事项。请记住,数字本身不是目标——目标是通过长期跟踪它们并在数据中发现模式来指导项目和流程的改进。分别对每个项目进行测量,并跨项目进行综合测量,以全面了解您的项目的产出和结果。 + +* 流行度/知名度 +* 访问项目网站的访客数量 +* GitHub/GitLab上的总关注者数量 +* 社交媒体账户(如Twitter、Facebook或LinkedIn)上的关注者数量 +* 新闻剪辑和媒体报道 +* 组织和主持的聚会数量(例如,通过meetup.com) +* 影响力 +* 在战略性项目中担任维护者/领导角色的员工数量 +* 项目贡献者的多样性 +* 被拒绝的补丁,以及拒绝的原因 +* 采用情况 +* 下载数量 +* 创建的分叉数量 +* 贡献的外部公司数量 +* 采用阶段(在概念验证和生产中的部署数量) +* 商业依赖(产品)的数量和质量——这可以通过查看对您项目做出贡献的公司,以及关注新闻和行业媒* 体来跟踪。 +* 项目成本 +* 员工:工程、公关与营销、法律 +* 基础设施和支持 +* 工具 +* 会议出席和旅行 +* 培训 +* 会员资格和捐赠 + + + +### 结束语 + +组织会以最适合他们需求的方式评估他们的开源专项、项目和贡献。最重要的是要记住,设定一个战略和逐步实现目标。您跟踪的内容以及方式自然会随之而来。 + +## 致谢 +贡献者: + +* [Christine Abernathy](https://twitter.com/abernathyca),Facebook的开源开发者布道师。 +* [Chris Aniszczyk](https://twitter.com/cra),云原生计算基金会的首席运营官。 +* [Joe Beda](https://twitter.com/jbeda),Google Kubernetes的创始工程师,以及Heptio的联合创始人兼首席技术官。 +* [Sarah Novotny](https://twitter.com/sarahnovotny),Google的Kubernetes社区经理。 +* [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/),Oath(雅虎+美国在线)的开源高级总监。 diff --git a/content/zh-CN/guides/organizing-and-managing-open-source-events.md b/content/zh-CN/guides/organizing-and-managing-open-source-events.md index 376232da..901aac3d 100644 --- a/content/zh-CN/guides/organizing-and-managing-open-source-events.md +++ b/content/zh-CN/guides/organizing-and-managing-open-source-events.md @@ -1,779 +1,634 @@ --- -title: Organizing and Managing Open Source Events +title: 组织与管理开源活动 --- -Open source events are popular as much for the networking opportunities as for the skill building exercises and knowledge sharing. Events run the gamut from single focused internal talks and multitrack corporate external events to the international conferences. While decades of experience shape these events, today a global pandemic is driving a hard shift from physical to virtual venues. The change is likely permanent as virtual venues are unlikely to disappear once the novel coronavirus is curtailed or conquered. There are already hints that the future will see a rise of hybrid versions. +开源活动之所以受欢迎,不仅仅是因为它们提供了技能提升和知识分享的机会,还因为它们提供了良好的社交机会。活动的形式多种多样,从单一的内部讲座和多主题的公司外部活动到国际会议。尽管这些活动在几十年的经验中不断完善,但如今全球疫情正在推动活动从线下场所向线上场所的重大转变。这种变化可能是永久性的,因为一旦新冠病毒得到控制或被消除,线上会场也不太可能消失。已经有迹象表明,未来将会出现更多混合形式的活动。 -Behind all of these events is an OSPO or small events team managing the details, gathering speakers and volunteers, promoting the benefits, and calling open source fans to attend. Those responsible are invisible when all goes right and wishing they were if things go wrong. In short, event management can be a thankless job. Through it all, they make everything happen no matter what minor glitches or major pandemics might plague them along the way. +在所有这些活动的背后,都有一个OSPO或一个小型活动团队在管理细节、召集演讲者和志愿者、宣传活动的好处,并呼吁开源爱好者参加。当一切顺利时,这些负责人是隐身幕后的,而如果出了问题,他们也会希望自己也是隐形的。总之,活动管理可能是一项吃力不讨好的工作。尽管如此,无论遇到小问题还是大疫情,他们都会让一切顺利进行。 -The purpose of this guide is to help OSPOs and open source event team members pull off successful open source events through the sharing of experience and resources of those who have done so before and during the Covid-19 pandemic. This guide is meant to be a living document in that it is expected to be updated as the challenges of this time continue to unfold new obstacles and opportunities for event managers. +本指南的目的是通过分享那些在新冠疫情前和疫情期间成功举办开源活动的经验和资源,帮助OSPO和开源活动团队成员顺利举办开源活动。由于当前的挑战不断带来新的障碍和机遇,本指南预计将不断更新,因此它是一个动态文档。 -**Table of Contents** +**目录** -- [Guide Description](#guide-description) -- [Intro](#intro) -- [Open Source event types](#open-source-event-types) -- [4 key elements in virtual open source events](#4-key-elements-in-virtual-open-source-events) -- [Finding a theme or event focus](#finding-a-theme-or-event-focus) -- [Choosing a venue](#choosing-a-venue) -- [Organizing the event](#organizing-the-event) -- [Marketing an open source event](#marketing-an-open-source-event) -- [Lessons Learned](#lessons-learned) -## Guide Description +- [开源活动指南说明](#开源活动指南说明) +- [开源活动介绍](#开源活动介绍) +- [开源活动类型](#开源活动类型) +- [线上开源活动的四个关键元素](#线上开源活动的四个关键元素) +- [找到开源活动主题或焦点](#找到开源活动主题或焦点) +- [选择开源活动场所](#选择开源活动场所) +- [组织开源活动](#组织开源活动) +- [开源活动营销宣传](#开源活动营销宣传) +- [经验教训](#经验教训) -This how-to guide addresses opportunities and obstacles as well as issues and resolutions common to physical and virtual venues, for both internal and external audiences. Further, several specific issues, potential resolutions or mitigations, and ideas unique to each of those venues and audiences are discussed separately. This format was chosen to better enable the reader to review and choose tactics and strategies as befitting their own event, available resources, and end goals for organizers and attendees. -Resources are provided as separate addendums. For example, the attached budding speakers list was jointly formed and seeded by the people, companies, and the Linux Foundation who collaborated to build this guide. This approach is meant to enable others to also collaborate in building and strengthening these resources over time. +## 开源活动指南说明 -Readers are encouraged to check back for updates to the guide and resource addendums regularly. -## Intro +本指南介绍了线下和线上场所的机遇与障碍,以及常见问题和解决方案,适用于内部和外部受众。此外,还分别讨论了针对每种场所和受众的一些特定问题、潜在解决方案或缓解措施以及想法。选择这种形式是为了让读者更好地根据自己的开源活动、可用资源以及组织者和参与者的最终目标来评估和选择方法与策略。 -Open source events are educational and networking hubs for the benefit of specific or at-large open source communities. Whether intimate or gigantic, these events are essential to the growth of the open source movement, of individual careers and professional reputations, and the growth of specific open source projects. +资源作为单独的附录提供。例如,附录中的演讲者列表是由参与编写本指南的人士、公司和Linux基金会共同创建和提供的。这种协作方法旨在使其他人也能够不断参与构建和完善这些资源。 -It is easy to think of open source events as similar to planning, organizing and promoting other technology events. While there are some similarities overall, open source events are in a category of their own. +欢迎读者定期查看本指南和资源附录的更新。 -> "Honestly, there are a lot of differences. A traditional tech event is more about strategic alliances and partnerships and how can you help me and how can I help you, but all for more of a capitalistic purpose, as it were," – Angela Brown, senior vice president and General Manager of Events at [the Linux Foundation](https://www.linuxfoundation.org/). -*"By its very nature, the open-source community is deeply passionate about what they do, and very passionate about open-source. That passion extends into everything,"* - added Brown, who has worked on tech events for other companies since 1994. She joined the Linux Foundation in 2007 after the organization arose from the merger of the previous open-source Development Labs and Free Standards Group. Linux Foundation events began to take shape almost immediately. +## 开源活动介绍 -The good news is there is a long laundry list of event management skills that are easily transferable from tech events to open source events. However, failing to keep key differences in mind can set your event up for failure from the start. -*"When you realize what those motivations are, it does infer and change how you are actually going to create an event,"* - Brown explained. +开源活动是特定或大型开源社区的教育和交流中心。无论规模大小,这些活动对于开源运动的发展、个人职业生涯和行业声誉的提升,以及特定开源项目的增长都至关重要。 -Those motivation differences also create some interesting, and often misunderstood conference feedback. +人们很容易认为开源活动与规划、组织和推广其他技术活动类似。虽然总体上有一些相似之处,但开源活动实际上自成一类。 -For one thing, open source programmers are passionate so they are quick to approach organizers at conferences to report what’s wrong or what could be improved. These encounters can sound like harsh judgments and complaints, but they usually are not. +> “坦白说,有很多不同之处。传统的技术活动更多的是关于战略联盟和合作关系,以及你如何帮我、我如何帮你,但所有这些更多的是出于资本的目的。” —— [Linux基金会](https://www.linuxfoundation.org/)高级副总裁兼活动总经理Angela Brown。 -*"It’s what they do: find bugs and fix them. That's how we can iterate and make events better. It doesn't mean that people don't actually enjoy the events, but it definitely was funny. I had a hard time with that at the beginning,"* - laughs Brown. +*“就其本质而言,开源社区对他们所做的事情,以及对开源本身,都充满热情。这种热情延伸到方方面面,”* - Brown补充到。自1994年以来,她一直在其他公司参与技术活动工作。2007年,她加入了由之前的开源开发实验室和自由标准组织合并而成的Linux基金会。Linux基金会的活动很快就开始成形。 -There are marked differences in OSPO and event teams charged with supporting open source as well. Team history, skill sets, and aims and goals can vary widely. +开源活动是特定或大型开源社区的教育和交流中心。无论规模大小,这些活动对于开源运动的发展、个人职业生涯和专业声誉的提升,以及特定开源项目的增长都至关重要。 -Most open source event organizers have funny tales and war stories to share. But not all of them came to the task by the same path. Some, like the Salesforce team, picked up the responsibility just before a pandemic locked them down. +人们很容易认为开源活动与规划、组织和推广其他技术活动类似。虽然总体上有一些相似之处,但开源活动实际上自成一类。 -*"In the world of open source we want to make sure people know we’re just starting to dip our toes into these events that are very specific to open source, but we have done quite a few,"* - said Alyssa Arvin who worked in engineering marketing at Salesforce for seven years before moving to [its OSPO](https://opensource.salesforce.com/) in December – roughly a month before the novel coronavirus went viral on a pandemic scale. +“坦白说,有很多不同之处。传统的技术活动更多的是关于战略联盟和合作关系,以及你如何帮我、我如何帮你,但所有这些更多的是出于资本的目的。” —— [Linux基金会](https://www.linuxfoundation.org/)高级副总裁兼活动总经理Angela Brown。 - - -## Open source event types - -There are four general categories for open source events. The first two are determined by venue: physical or virtual. The remaining two are determined by audience: internal (company employees and partners) or external (open to people employed outside of the event organizer). - -Event types can also be categorized by purpose or goal. - - - -> "There are events that we're doing to cultivate a community internally. There are events that we're trying to do to appreciate the external communities that we rely on. And then there are the events that we're doing to support the Open Source Projects that come out of Salesforce" – Joshua Simmons, formerly a senior strategist in Salesforce’s OSPO. - -Many organizations have experience in conducting open source events in physical venues, whether those are onsite or off, or for an internal or external audience. +“就其本质而言,开源社区对他们所做的事情,以及对开源本身,都充满热情。这种热情延伸到方方面面,” - Brown补充到。自1994年以来,她一直在其他公司参与技术活动工作。2007年,她加入了由之前的开源开发实验室和自由标准组织合并而成的Linux基金会。Linux基金会的活动很快就开始成形。 -> "The process is pretty similar for internal and external events, other than the marketing piece," – Shilla Saebi, Open Source Program Manager at [Comcast](https://comcast.github.io/). +好消息是,有一长串的活动管理技能可以很容易地从技术活动转移到开源活动。然而,如果没有牢记关键的差异,你的活动可能从一开始就注定失败。 -However, virtual events are significantly different and completely new to many organizations who soon discovered they would need to learn how on the fly. +*“当你意识到这些动机是什么时,就会推断出并改变你实际创建活动的方式,”* - Brown解释说。 -> "Physical events and virtual events have different advantages and limitations. Physical events can create an in-person emotional experience but not everyone in the world is able to attend due to location or related travel cost. On the other hand, virtual events are scalable. They have an easy entry point," – Teresa Terasaki, Brand Experience & Events and Program Manager, Open Source Community at [Google Open Source]. +这些动机之间的差异也会产生一些有趣和经常被误解的会议反馈。 -Among the main advantages to a physical event are the social interactions, networking opportunities and a new environment in which to spur innovation and collaboration with others. These happen to also be the greatest weaknesses in virtual events. +一方面,开源程序员充满热情,因此他们会在会议上迅速找到组织者,报告哪些地方出了问题,哪些地方可以改进。这些交流听起来像是苛刻的批评或抱怨,但通常并非如此。 -Among the main advantages of a virtual event are increased safety during a pandemic, scalability, affordability, accessibility, and no travel or other associated costs. But virtual events have downsides too. +*“他们的工作就是发现错误并修复它们。这样我们才能不断改进,把活动做得更好。这并不意味着人们不喜欢这些活动,但这确实很有趣。一开始我很难接受这一点,”* Brown笑着说。 -> "In recent months, we’ve seen a significant increase in participation at virtual events. Virtual events are able to reach new geographies and enable people who wouldn’t normally be able to join to attend traditional, in-person events. But they aren’t able to provide intensive in-person experience like physical events do," – María Cruz, Program Manager, Community Engagement at [Google](https://opensource.google/). +负责支持开源的OSPO和活动团队之间也存在明显差异。团队历史、技能情况、目标和使命可能大相径庭。 -Beyond these general categories, are myriad subcategories of event types. Most are determined by topic, but others are categorized by time or intensity. +大多数开源活动的组织者都会分享趣事和血泪史。但不是所有人都会以相同的方式完成任务。有些人,例如Saleforce团队,是在疫情将他们困住之前承担起这一责任的。 -*"Events like sprints for projects come to mind. For example, sprints on the Python language orbit around every Python conference. They hold several days of sprints, both for people who are core to the project to make headway while they have the good fortune of being in the same physical space with each other. But also, as an onramp to new contributors,"* said Josh Simmons, former open source strategist for [Salesforce](https://opensource.salesforce.com/). He also previously served as President of Salesforce’s Open Source Initiative. +*“在开源世界中,我们希望让人们知道我们刚刚开始涉足这些专门针对开源的活动,但我们已经做了相当多的工作,”* - Alyssa Arvin说。她在Salesforce公司的工程营销部门工作了7年,然后在12月份调任到了[该公司的OSPO](https://opensource.salesforce.com/)——大约在新冠疫情全球爆发前的一个月。 -*"Sprints are going to be an important one to look into at some point. You might want to make sure it's on your radar."* -Regardless of the type of open source event you’re currently planning, virtual will reign supreme in venues for as long as the pandemic lasts and will probably remain a strong option afterwards. While most organizations are learning how to host a virtual event on the fly, shared experiences are beginning to reveal some good guidance. +## 开源活动类型 -## 4 key elements in virtual open source events -Pivoting to virtual open source events is a smart and natural move during the Covid-19 pandemic. But that is not to say it was an easy move to make. +开源活动一般分为四类。前两类由场地决定:线上或线下。其余两类由受众决定:内部(公司员工和合作伙伴)或外部(对活动组织者以外的人员开放)。 -*"First we had to negotiate out of all of the contracts we had this year. It was a lot to contend with because if a local government bans large gatherings, for example, then you've got force majeure in your favor. But just being in a pandemic doesn't free you from the contract,"* said Brown. +活动类型也可以用活动目的或目标来区分。 -*"It quickly then became necessary to research virtual event platforms and try to figure out which ones really meet our needs. But perhaps the biggest challenge was in rolling those out and trying to create the same type of attendee experience as in physical events, which to be quite honest, you can't create the same thing. Right? So, you move on to planning an entirely new and hopefully just as engaging experience,"* Brown added. - -But the stress endured by teams scrambling to make virtual work is not for naught. +> “我们举办的活动有的是为了在内部培养社区,有的是为了感谢我们依赖的外部社区,还有的是为了支持Salesforce推出的开源项目,”前Salesforce OSPO高级策略师Joshua Simmons说。 + +许多组织都有在线下场所举办开源活动的经验,无论在内部或外部场所,或者针对内部或外部受众。 -*"This is an opportunity to think outside the box including platform, format, content, timing, and interactivity. We can also reach audience groups that you don’t normally reach at in-person events,"* said Terasaki. +> “除了营销部分,内部和外部活动的流程非常相似,” - [Comcast公司](https://comcast.github.io/)开源项目经理Shilla Saebi说。 -Teams should get comfortable with planning open source events as they’re likely to still be in use far after the pandemic rush subsides. However, virtual events are also likely to evolve. +然而,线上活动与此大相径庭,对许多组织来说是全新的经历,他们很快就会发现自己需要快速学习如何开展线上活动。 -*"Considering the level of innovation in accessibility for remote participation, and the positive impact it has on the event’s reach, there is a chance that events transform to a hybrid format. This would imply that an event can both be in-person and virtual: while some participants will gather in the same venue, there could be a portion of the speakers presenting virtually, with some attendees joining remotely as well,"* said Cruz. +> “线下和线上活动各有优势和局限。线下活动可以带来亲临现场的情感体验,但考虑到地理位置或相关旅行成本,并不是世界上每个人都能参加。另一方面,线上活动具有可扩展性。参与门槛低,” – [Google开源社区](https://opensource.google/)品牌体验与活动和项目经理Teresa Terasaki说。 -**Event focus** +线下活动的主要优势包括社交互动、建立人脉的机会,以及激发创新和与他人合作的新环境。这些恰好也是线上活动的最大弱点。 -Deciding the focus of your event is the first and most important step as it sets the scale, tone, and pace for the rest of the event planning. +线上活动的主要优势包括:疫情期间安全性更高、可扩展性、经济性、可访问性,以及无需差旅或其他相关开支。但线上活动也有缺点。 -*"First, figure out what your purpose is and why you are gathering people together. Who are you looking to gather together, and how do dates and timing work for that group? There are so many events out there, or there have been so many events out there already. How is yours different and why would people want to attend? These are questions to ask yourself and team,"* says Brown. +> “最近几个月,我们看到参与线上活动的人数大幅增加。线上活动能够覆盖新的地域,让通常无法参加传统现场活动的人有机会参与。但线上活动无法像线下活动那样提供深度现场体验,” - [Google](https://opensource.google/)社区参与项目经理María Cruz说。 + +除了这些常见开源活动类别之外,还有无数的活动类型子类别。主要通过活动主题区分,也有通过举办时长和活动密集度来进行区分。 -In short, make sure you’re bringing an event with value to a group that will value the information. +*“我想到那些作为开源项目冲刺的开源活动。例如,每次Python会议都会围绕Python语言开展冲刺活动。他们会举行为期数天的冲刺活动,既让项目的核心成员取得进展,又让他们有幸在同一个物理空间中彼此交流,也为新贡献者提供入门的途径,”* 前[Salesforce](https://opensource.salesforce.com/)开源策略师Josh Simmons说。他之前还担任过Salesforce开源计划主席。 -Once you know the purpose and the intended audience, you’ll be able to quickly determine other parameters, such as the type of virtual venue technologies you will need. +*“冲刺将是你在某个时刻需要关注的重要事项。你可能需要确保它在你的视野范围内。”* -**Funding: registration fees and sponsorships** +无论你目前正在筹划哪种类型的开源活动,只要疫情持续,线上活动将在场地选择上占据主导地位,并且在疫情结束后可能仍然是一个强有力的选择。虽然大多数组织正在快速学习如何举办线上活动,但共享的经验已经开始揭示一些有用的指导。 -Registration and sponsorship fees are typical funding sources for physical open source events, but these may be harder to muster for virtual events. Traditionally, open source events fare better if registration fees are low as that tends to bring in larger attendance numbers. Sponsorships cover many if not all of the costs at many events, or at least any shortfall from lowering the registration fees. -While many organizers are not seeking to profit from an event, most would like to cover their costs if for no other reason than to offer more events to the community. +## 线上开源活动的四个关键元素 -*"A lot of that comes down to why a sponsor would sponsor that event in the first place. That varies. For some events like Linux Kernel Summit, for example, which is annual meeting of 80 to 90 people, where the Linux story evolves, and the core kernel developers sit down and decide what's going to happen with future release cycles. Sponsors pay good money to get a seat at the table at that event. That is really the only benefit they care about,"* says Brown. -*"Whereas another event like Linux Plumbers Conference attracts developers who are working in all of the core subsystems of the Linux kernel, that so many companies and organizations depend on. A lot of companies sponsor that event, not because of the individual benefits that they find in a sponsorship perspective, but simply because they know it is important to support the community. It benefits everybody. But then you have other events like KubeCon, where it is a lead gen thing,"* Brown added. +在新冠疫情期间转向开源活动是一个明智而自然的举措。但这并不是说这是一件容易的事情。 -Virtual events incur costs too and organizers must decide whether to pay them or seek funding elsewhere. Consider that given the long dry spell in open source events and conferences, there is pent up demand now among sponsors and open source recruiters who are effectively cut off from much of the open source community. Finding a way to involve sponsors in virtual events helps restore the full circle of open source relationships. +*“首先,我们必须通过谈判解除今年的所有合同。这涉及很多棘手的工作,因为如果当地政府禁止大型集会,那么不可抗力就会对你有利。但是,仅仅因为处于新冠疫情之中,则并不能让你免于履行合同,”* Brown说到。 -**Code of conduct** +*“很快,我们就必须开始研究线上活动平台,并试图找出哪些平台能真正满足我们的需求。但可能最大的挑战在于推出这些线上活动,并试图创造与线下活动相同的参与体验。坦白说,你无法创造出完全相同的体验,对吧?所以,你需要转而规划一种全新的、希望同样吸引人的体验,”* Brown补充到。 -It comes as no surprise to anyone that a code of conduct is just as imperative for online behavior as it is in real world events. However, your current standby code of conduct may need some revamping to ensure all the virtual bases are covered. Be sure to comb through it carefully before deeming it the official rule of the venue. +但是,争分夺秒组织线上开源活动的团队所承受的压力并非毫无意义。 -*"It's not just about having the code of conduct, it's about knowing how to actually execute on it,"* said Brown. +*“这是一个跳出固有框架来思考的机会,包括平台、形式、内容、时机以及互动性。我们还可以接触到通常在现场活动中接触不到的受众群体,”* - Terasaki说。 -**Diversity** +各团队应熟练掌握开源活动规划技能,因为疫情消退后这些技能很可能仍在使用。不过,线上活动也有可能不断发展。 -Diversity outreach is important in efforts aimed at building broader interest and participation in open source and open source projects, and to increase event attendance. +*“考虑到远程参与的无障碍创新水平及其对活动影响力的积极影响,未来的开源活动有可能转变为混合模式。这意味着一场活动可以线下、线上同时进行:虽然一些参会者将聚集在同一地点,但部分演讲者可能在线上演讲,同时也有部分参会者远程参加,”* Cruz说。 -*"Tech has a representation problem, period. And Open Source requires someone to have volunteer time, basically to contribute. That is sort of the proxy for privilege. So we end up with Open Source having an even bigger diversity in representation problem than tech itself does,"* Simmons said. -*"We have to do a lot to intentionally overcome that. We proactively look for speakers with name recognition but also if the speaker can be a woman, great. If it can be person of color, all the better. If they can be a gender minority, fantastic. We're trying to both tap into people with name recognition as well as people who can be role models,"* added Simmons. +**开源活动聚焦点** +确定活动的目的是第一步,也是最重要的一步,因为它决定了活动规模、氛围,以及活动后续规划的节奏。 -## Finding a theme or event focus +*“首先,弄清楚你的目标是什么,以及为什么要把人们聚集在一起。你希望召集哪些人,日期和时间如何安排?正在举办或者已举办的活动数不胜数。你的活动有什么不同之处,为什么人们想要参加?这些都是要问自己和团队的问题,”* Brown说。 -The first step is to determine the theme or focus of the event as that will guide everything that follows in event planning. +简而言之,请确保你要举办的活动能为重视这些信息的群体带来价值。 -*"At the core, you have to decide what the purpose is of the event and who you plan on being there. That will in turn define where the event should be, what kind of venue it should be in, what the setup should be, and how you are going to market it,"* said Brown. +一旦确定了目的和预期受众,你就能迅速确定其他决定因素,如所需的线上会场技术类型。 -Theme and expected attendee size affect the event’s setting and tone. There are events where the purpose is to include and attract more people. Conversely, there are some events where the headcount does not matter, for example, a hackfest or a technical forum. *"At that point, it is really about creating an environment where people can come and all they have to focus on is getting the work done that they came to accomplish with other people. And hopefully having a good time while they are doing it,"* Brown added. -However, deciding the purpose of the event can be a tough call. Gauging topic interests can be measured in several ways, but it still may come down to an educated guess. +**活动经费:报名费和赞助费** -Among other things, Salesforce uses its Volunteer Time Off (VTO) program, which is an internal program focused on giving back to the open source community, to judge event interest. -*"So much of this is trial and error. Like all Open Source program offices, we are trying to figure this out. We also try to tie it to exact metrics such as the number of volunteer hours we get. Just to see if this is something that is of interest to people,"* said Alyssa Arvin, Senior Program Manager, Open Source at Salesforce. +报名费和赞助费是线下开源活动一贯的经费来源,但对于线上活动来说,这类费用可能会更难筹集。按照以往经验来看,如果注册费较低,开源活动的参与人数通常会更多,活动就会进展得更加顺利。在许多活动中,赞助费即使不能覆盖全部成本也能覆盖大部分成本,或者至少能够弥补因降低报名费而造成的资金缺口。 -For example, if Salesforce aims for 40 people to volunteer at this event and 50 employees sign up, they know interest in the event is high. However, if only 15 employees volunteered then *"okay, this might not be the best event. Or maybe we weren't marketing it correctly. So we adjust our event strategy and plan too. Having metrics helps us find a hit topic or theme for the event,"* said Arvin. +虽然许多组织者并不期望从活动中获利,但如果不是为了向社区提供更多的活动,大多数组织者都希望能够收回成本。 -Comcast uses polls to narrow their event topics. +*“这在很大程度上取决于赞助商究竟为什么要赞助这项活动。这因情况而异。例如,Linux 内核峰会(Linux Kernel Summit)是有 80 到 90 人参加的年度会议,Linux 的故事在这里不断发展,核心的内核开发人员坐在一起决定未来发布周期的内容。赞助商花大价钱就能在会上获得一席之地。这实际上是他们唯一关心的好处,”* Brown说。 -Saebi says she reaches out to the community with a quick survey or a poll in the Slack channel to ask, *"’Hey, we're thinking about doing a conference. What topics are exciting to you? And then do you also have any speakers that you'd like to recommend?’ All they have to do is choose their top topics from our list."* +*“而像Linux Plumbers Conference这样的活动则吸引了在Linux内核所有核心子系统中工作的开发者,许多公司和机构都依赖于这些开发者。很多公司赞助这个活动,不是出于从赞助中获得个体好处,而仅仅是因为他们知道支持社区的重要性。这对每个人都有好处。但是还有像KubeCon这样的其他活动,那里是一个培育潜在客户的场所,”* Brown补充到。 -Do not be afraid to consider a target audience as an event theme too. A lot of mutual good can come from helping different groups find opportunities and overcome challenges in open source. +线上活动同样会产生成本,组织者必须决定是自行承担成本,还是从别处寻求资金支持。考虑到开源活动和会议经历了长时间的空白期,现在赞助商和开源招聘人员之间存在着被压抑的需求,他们实际上与开源社区的大部分隔绝了。找到一种让赞助商参与到线上活动的方法,有助于恢复开源协作关系的正常运转。 -*"We have events that focus on our employee resource group. Examples include a project for the LGBT community, one for women in technology, and another called BOLDforce for our Black, African American community. People are really excited and waiting for these events,"* said Arvin. -Ultimately, the event’s topic or theme is its purpose. Therefore, is must be highly focused and clearly articulated. +**行为准则** -*"Most recently we've been focusing on events aimed at building our internal open source community,"* said Simmons. -## Choosing a venue +人们对于线上活动的行为准则和现实世界活动一样重要不会感到奇怪。然而,为确保覆盖所有的线上活动基础事项,你现有的待实施行为准则可能需要一些修订。在确认它成为活动场所的正式行为准则前,请务必仔细梳理。 -Choosing a venue has always been largely driven by strategy than exotic locales. +*“不仅要有行为准则,还要知道如何真正执行它们,”* Brown说。 -*"The Linux Foundation gets a ton of requests to hold events in India, in Africa in different countries in South America, a lot of emerging countries where there's a lot of potential for future open-sourced community members,"* said Brown. -*"But there's the economics of it to consider too. Events are not cheap to hold and we can't be everywhere. But we don't want to limit the opportunities or potential from these emerging areas or other areas that we simply can't be in. So we think that virtual events gives us an opportunity to reach a larger, more diverse audience around the world, which is huge,"* Brown explained. +**多元化** -Because of the global pandemic, many event organizers are having to pivot from physical conferences and events to virtual ones. However, an eventual return to events in the physical world are also in the plans, as are budding ideas for hybrid events that blend virtual and physical activities. -*"Which format to choose depends on the open source project goals. Virtual events can be very valuable in reaching new geographies and transitioning to a virtual only connection is more seamless than with physical events. So in the future there will be a combination of both formats"* said Terasaki. +多元化外联很重要,可以建立对开源和开源项目更广泛的兴趣和参与度,并提高活动出席率。 -Sometimes the budget or other factors dictate the venue options. +*“科技领域存在代表性问题,这是事实。而开源要求有人有时间自愿贡献,这实际上是特权的一种体现。因此,开源在代表性的多元化方面的问题比科技领域本身的问题还要严重,”* Simmons说。 -"Sometimes if budgets are looking good for the year, for this year, for example, with pandemic, probably not, everything's going to be virtual, but for previous years, we've done internal events even externally at nice little venues. It just depends on the event and it could be an internal venue as well," said Saebi. +*“我们必须付出很多努力来有意地克服这一点。我们会积极寻找具有知名度的演讲者,但如果演讲者是女性,那非常好。如果是有色人种,就更好了。如果是性别少数群体,那就太棒了。我们在努力吸引知名人士以及可以成为榜样的人物,”* Simmons补充到。 -There are distinct pros and cons for each venue. -For example, "virtual events open up more opportunities for people who have geographic restrictions or economic challenges to participate in physical events. We saw people from 82 countries attend a recent virtual event. This is roughly 50% more countries represented than in-person events," said Terasaki. +## 找到开源活动主题或目的 -Comcast has also seen greater attendance at virtual events. -*"We did a talk on InnerSource internally and it went really well. We had, I think, 170 people show up, which is great. It's more than what we would have had in person,"* said Saebi. +第一步是确定活动的主题或目的,因为这将指导活动策划的后续所有工作。 -*"We're testing, experimenting, and learning. We have been breaking it up because people are getting Zoom exhaustion and conference call exhaustion and video chat exhaustion. We're trying to avoid doing the traditional eight-hour days. We're breaking it up and starting small, but so far so good."* +*“核心在于你必须决定活动的目的是什么,以及你计划邀请哪些人。这将反过来决定活动地点、场地类型、布置方式以及营销方式,”* Brown说。 -Google also found shorter formats work better in virtual events. +主题和预期参会人数会影响活动的环境和氛围。有些活动的目的是吸引更多的人参加。相反,也有一些活动人数并不重要,例如黑客马拉松或技术论坛。*“在那种情况下,真正重要的是创造一个环境,让人们可以专注于与他人一起完成他们要完成的工作,并希望在此过程中享受乐趣,”* Brown补充道。 -*"At small online developer events, past experience taught us that we lose approximately 30% of the audience every 60 min. Getting attention from the audience for a longer period of time at virtual events tends to be difficult. Shorter format is usually preferable. Look at[ Flutter Day 2020 playlist](https://www.youtube.com/watch?v=9dEQSyfcBYs&list=PLjxrf2q8roU1rBlI9vz01K2324nzIhYgp) to see some examples of short presentations showcased during an event,"* said Cruz. +然而,确定活动的目的可能是一个艰难的决定。可以通过多种方式衡量话题兴趣,但最终可能还是要靠有根据的猜测。 -Physical venues are a different arrangement entirely. There are different venues around the world for different types and sizes of meetings. But the building isn’t the only consideration. +此外,Salesforce 使用其志愿者休假 (Volunteer Time Off,VTO))计划来判断活动的兴趣度,该计划是一个专注于回馈开源社区的内部项目。 -*"Reliable Wi-Fi is critical. We use our own network company now that we bring with us. But even today, most of the Wi-Fi and internet in venues is actually run by the companies that traditionally do not understand the bandwidth drain that our community will take, or the fact that they're going to be walking around with three different devices on them that are all pulling from the bandwidth at the same time,"* said Brown. +*“这其中有很多是反复试验的结果。像所有开源项目办公室一样,我们也在努力搞清楚这一点。我们还尝试将其与具体指标联系起来,例如我们获得的志愿者工时数。只是为了看看这是否是人们感兴趣的事情,”* Salesforce开源项目高级项目经理Alyssa Arvin说。 -The Wi-Fi issue is easy to miss on the planning end and hard to ignore at the event. +例如,如果Salesforce希望有40人愿意参与此活动,但有50名员工报名,他们就知道人们对此活动的兴趣很高。然而,如果只有15名员工自愿参加,那么 *“好吧,也许这不是最好的活动。或者,也许我们的营销方式不正确。因此,我们也要调整活动策略和计划。有了衡量标准,我们就能找到受欢迎的活动话题或主题,”* Arvin说道。 -*"The venue tells you everything is fine, and they can totally support 100 people. But you really want to be looking at 3 times that. Again, it depends on what the people are going to be doing at the event but whatever that is, there's a lot of bandwidth drain,"* Brown added. +Comcast公司使用投票来缩小其活动主题范围。 +Saebi表示,她会在Slack频道中通过快速调查或投票的方式联系社区并提问,*“‘嘿,我们正在考虑举办一次会议。你们对哪些话题感兴趣?你们还有什么演讲者可以推荐吗?’他们只需从我们的列表中选择他们最感兴趣的主题。”* -## Organizing the event +也不要害怕将目标受众作为活动主题。帮助不同群体在开源领域寻找机会、克服挑战,可以带来很多共同利益。 - +*“我们有专注于员工群体的活动。例如,我们有一个针对LGBT社区的项目,一个针对技术领域女性群体的项目,还有一个针对黑人和非裔美国人群体、名为BOLDforce的项目。人们对这些活动非常兴奋和充满期待,”* Arvin说。 -An open source event succeeds or fails on details. Organizing every element, no matter how small, is thereby crucial, no matter what the venue is. Most successful event organizers have a plan or a checklist they follow to make sure details are not overlooked. +归根结底,活动的主题或议题就是活动的目的。因此,它必须高度聚焦并清晰表达。 -Salesforce works with a template they call a program plan wherein the company identifies the overarching goals and maps out specific paths. The questions asked internally to flesh out the planning include: +*“最近,我们一直专注在用于建设我们内部开源社区的活动上,”* Simmons说。 -* Who are we going to engage with? -* How is it going to be publicized? +## 选择开源活动场所 -* What is our follow-up strategy? -* What is our pre-event strategy? +场所的选择在很大程度上是由策略决定的,而不是异国情调。 -* What metrics do we need to use? The number of attendee or engagement levels on social media, something else? +*“Linux基金会收到大量请求,希望在印度、非洲、南美不同国家以及许多新兴国家举办活动,这些国家有着成为未来开源社区成员的巨大潜力,”* Brown说。 -Below are tips for planning details you may want to add to your own event planner, or use to build one. +*“但也要考虑经济因素。举办活动的成本不低,我们不可能在每个地方都举办活动。但我们不想限制这些新兴地区或其他我们无法到达地区的机会和潜力。因此,我们认为线上活动为我们提供了一个机会,可以接触到全球更多、更多样化的受众,这非常重要,”* Brown解释说。 -**Selecting a date** +由于全球疫情,许多活动组织者不得不从线下会议和活动转向线上活动。然而,最终回归线下活动也是计划中的一部分,同时线上与线下活动相结合的混合活动也在萌芽之中。 -Both internal and external events can easily overlap with other events which will negatively affect your event’s success. Selecting a date to enhance your odds for success is therefore of prime importance. +*“选择哪种形式取决于开源项目的目标。线上活动在覆盖新地区方面非常有价值,且向纯虚拟连接的过渡比线下活动更为顺畅。因此,未来将会有两种形式的结合,”* Terasaki说。 -*"We have an open source events calendar in our organization that our team manages and updates. All the big open source conferences are on the calendar, and others too, because you don’t want there to be a scheduling conflict with your event, but neither do you want to burn people out by stacking conferences too close together,"* said Saebi. +有时,预算或其他因素决定了场地的选择。 - +“有时候,如果一年的预算状况良好,则根据活动本身情况,也可能在内部场地举办活动。像今年因为疫情的原因,可能就不行了,一切活动都会是线上的。但在前几年,我们在不错的小场馆举办过内部活动,甚至还有外部活动,” Saebi说。 -*"I try to schedule our conferences in a slower month and in the middle of the week so people are home and free to enjoy their weekends,"* she added. +线上和线下活动各有明显的优缺点。 - +例如,“线上活动为那些受到地理限制或经济困难的人提供了更多参加线下活动的机会。我们看到来自82个国家的人们参加了最近的一次线上活动。这比现场活动多出大约50%的国家,”Terasaki说。 -Watch out for overlaps with local events unrelated to open source too, as well as for local occurrences ranging from planned strikes and protests to holiday observances. +Comcast公司的线上活动也有更多的参与者。 - +*“我们在内部进行了一场关于内部开源的讲座,效果非常好。我记得,参加的人数达到了170人,这非常棒。这比我们举办现场活动时的参与人数要多,”* Saebi说。 -*"If you plan an event in Germany, for example, and it's a national holiday, even if all of your attendees are coming from outside of Germany and have no problem going to the event on that day, it's going to be very difficult to get the support from the local venue and vendors that you need, or all the restaurants might be closed, or taxis might not be running, etc,"* warned Brown. +*“我们正在测试、试验和学习。因为人们已经对Zoom会议、电话会议和视频聊天感到疲惫不堪,我们一直在拆分这些线上活动。我们正在努力避免进行传统的八小时全天会议,将其拆分,从简短的会议开始,目前来看效果还不错。”* -You may think virtual events would be exempt from such concerns, but they aren’t. Holiday observances can still affect attendance and the availability of vendor support in everything from technical support to the mailing of welcome gifts or other swag. +Google公司也发现,短时长的形式在线上活动中效果更好。 - +*“在小型在线开发者活动中,以往的经验告诉我们,每60分钟大约会流失30%的观众。在线上活动中,长时间吸引观众的注意力往往很困难。较短的形式通常更受欢迎。可以看看[Flutter Day 2020 playlist](https://www.youtube.com/watch?v=9dEQSyfcBYs&list=PLjxrf2q8roU1rBlI9vz01K2324nzIhYgp)播放列表,其中有一些在活动期间进行的简短演讲示例,”* Cruz说。 -**Finding and selecting speakers** +实体场地完全是另一种安排。世界各地有不同类型和规模的会议所需的不同场地。但建筑并不是唯一的考虑因素。 - +*“可靠的Wi-Fi至关重要。我们现在使用我们自己的网络公司。但即使在今天,场馆中的大部分Wi-Fi和互联网实际上都是由一些公司在运营,这些公司通常并不了解我们的社区会消耗多少带宽,也不知道他们将带着三个不同的设备到处走动,而这些设备都会同时占用带宽,”* Brown说。 -First, align speaker selection with specific goals. Closely consider your goals for the event. But you may also want to reach towards your company’s overarching goals as well as those of open source communities. This is no time to think small. +Wi-Fi问题在策划阶段很容易被忽略,但在活动中却很难被忽视。 - +*“场地会告诉你一切都没问题,他们完全可以支持100人使用网络。但实际上你真的需要考虑三倍的容量。同样,这取决于人们在活动中会做什么,但无论是什么活动,都会有大量的带宽消耗,”* Brown补充道。 -Consider speakers within your organization too. But finding speakers from outside of your organization doesn’t have to be any more of a daunting task than finding them internally. - +## 组织开源活动 -*"I find many of our speakers from past Open Source Summit events and the Cloud Native Computing Foundation (CNCF) speakers bureau, but those speakers are mostly related to CNCF projects. I think it would be a fantastic idea for everyone to contribute to building and updating a Linux Foundation speaker’s bureau,"* said Saebi, who also keeps a database of speakers that contains notable external speakers, and speakers across Comcast. - +一个开源活动的成败取决于细节。无论场地如何,组织好每一个环节,无论多么微小,都是至关重要的。大多数成功的活动组织者都有一个计划或清单,以确保细节不会被忽略。 -Other sources to look to for possible speakers for your event include paypercall.io, which Saebi finds "extremely helpful in finding speakers, especially those in open source." And, of course, social media such as LinkedIn and Twitter. +Salesforce使用一种他们称为“项目计划”的模板,公司在其中确定总体目标并规划具体路径。为了完善计划,内部提出的问题包括: - +* 我们要让谁参与 ? -*"I have a list that I created on Twitter. I would recommend other folks to create lists as well, but they're also more than welcome to subscribe to my list. It is called ‘open source speakers’ and it's three words,"* said Saebi. Saebi says she too looks to underrepresented groups in open source to help her find speakers. For example, she may ask women she knows in open source for recommendations on potential women speakers. +* 如何进行宣传? - +* 我们后续的跟进策略是什么? - -**Developing internal speakers** +* 我们的活动前策略是什么? - +* 我们需要使用什么指标?参会人数、社交媒体上的参与度,还是其他? -Also consider speakers for your event based on your organization’s internal needs to develop and encourage a new and deeper bench of brand ambassadors. +以下是有关策划细节的提示,供你添加到自己的活动策划中,或用于创建一个活动策划。 - -*"Internal events are a safe environment of your peers. So, we try to find people who have never given a talk before and give them this larger practice round because there's anywhere between one and three hundred people dialing into it. That gives them the confidence to go and submit to an external conference,"* said Arvin. +**选择开源活动日期** - -There are ways to add to the comfort and pacing of those new to speaking, and for more seasoned speakers too who may be feeling the wear and tear of many virtual events and far too many Zoom sessions. +无论是内部活动还是外部活动,都很容易与其他活动冲突,从而对你的活动的成功造成负面影响。因此,选择一个能提高成功几率的日期至关重要。 - +*“我们内部有一个开源活动日历,由我们团队管理和更新。所有大型开源会议和其他会议都在日程表上,因为我们既不希望有其他活动与自己的活动在时间安排上发生冲突,也不希望会议安排得太密集而累坏大家,”* Saebi说。 -*"We pre-record the presentation, then we can add captions to make our events accessible. In that way, presenters can also focus on live Q&A on the day of,"* said Cruz. +*“我尽量把会议安排在较轻松的月份和周中举办,让参与者可以在家里享受他们的周末时间”*,她补充到。 - +还要注意与本地其他与开源无关的活动的冲突,以及当地发生的各种事件,从计划中的罢工和抗议活动到节日庆祝活动。 -Just keep in mind that you may need more than a presenter, particularly for virtual events. +*“举个例子,如果你在德国策划一项活动,而那天是德国的公共假期,即使所有参会者都来自德国以外,并且在当天去参加活动没有问题,你也会碰到诸多难题包括很难从当地场馆和供应商那里获得所需的支持、餐厅全部关门、出租车也可能不运行等等,”* Brown警告说。 - +你可能觉得线上活动不需要担心这些问题,但事实并非如此。节日庆祝活动仍然会影响出席率以及供应商支持的可用性,包括技术支持、欢迎礼品或其他小礼物的邮寄等方面。 -*"Moderators are needed more than ever. We recruit seasoned speakers for the moderator’s role, then presenters can focus on their presentation and live Q&A,"* said Terasaki. - +**寻找和遴选演讲者** -**Choosing platforms** - +首先,根据具体目标选择演讲者。仔细考虑你的活动目标。但是,你可能还想实现公司的总体目标以及开源社区的目标。现在可不能想得太小。 -If you’re planning a virtual event, you’ll want to pay close attention to your platform options because they vary significantly in many important ways. +也可以考虑组织内部的演讲者。但是,从组织外部寻找演讲者并不一定比在组织内部寻找演讲者更艰巨。 - +*“我从过去的开源峰会活动和云原生计算基金会(CNCF)的演讲者资料库中找到了许多演讲者,但这些演讲者大多与CNCF项目有关。我认为,让每个人都为建立和更新Linux基金会演讲者资料库出一份力将是一个绝妙的主意,”* Saebi说,她还保存了一个包含知名外部演讲者和Comcast内部演讲者的数据库。 -*"We did a virtual event platform comparison of 65 different platforms and a lot of these were simply about content delivery. And obviously, for Linux Foundation events, we're looking for something different than that,"* said Brown. +其他可以寻找活动演讲者的渠道包括paypercall.io,Saebi认为它“对寻找演讲者,尤其是开源领域的演讲者非常有帮助”。当然,还有LinkedIn和Twitter等社交媒体。 +*“我在Twitter上创建了一个列表。我建议其他人也创建类似的列表,但也非常欢迎他们订阅我的列表。这个列表叫做‘open source speakers’,由三个英文单词组成,”* Saebi说。Saebi表示,她也会请开源领域中的弱势群体来帮助她寻找演讲者。例如,她可能会请她认识的开源领域的女性推荐潜在的女性演讲者。 -The results of the[ Linux Foundation’s platform comparisons](https://docs.google.com/presentation/d/1jGd0geh72Lxr0o3zV044K5yhXc6Q8tp4p8fhnnXJsqo/edit#slide=id.p3) are now freely available. You’ll want to check back periodically because this is a fluid document, Brown says. But here are samples of the results as of September 2020: +**培养内部演讲者** -![platform comparison](/img/guides/organizing-and-managing-open-source-events1.jpg) - -![speciality platfomr comparison](/img/guides/organizing-and-managing-open-source-events2.jpg) +还可以根据组织内部的需求来考虑活动的演讲者,培养和鼓励一批新的、有更深层次链接的品牌大使。 - +*“内部活动是一个由你的同事组成的安全环境。因此,我们会尽量找那些从未做过演讲的人,给他们这个更大的实践机会,因为有一到三百人会参与这个活动。这会让他们有信心去申请外部会议演讲,”* Arvin说。 -The Linux Foundation is also journaling their organizers’ experience with each platform after an event to give members a more detailed accounting of successes and failures. You can find that in[ blog posts](https://events.linuxfoundation.org/2020/06/03/success-with-qiqochat/) on the events landing page. +有一些方法可以增加新手演讲者的舒适度和节奏感,也可以帮助那些经验丰富的演讲者,他们可能因为参加了许多线上活动和过多Zoom会议而感到疲惫不堪。 - +*“我们会预先录制演讲,然后添加字幕,使我们的活动更容易理解。这样,演讲者在活动当天也可以专注于现场问答,”* Cruz说。 -Google looks for a specific set of features and functionalities, as well. +请记住,你需要的可能不仅仅是一位演讲者,尤其是对于线上活动来说。 -*"We value compliance, safety, diversity, Inclusion, and accessibility. We try to pay extra attention to that and adjust the environment for online events. Do we have captions? Does the recording platform have a function for speakers to change font size for speaker notes?, etc,"* said Terasaki. +*“现在比以往任何时候都更需要主持人。我们招募经验丰富的演讲者担任主持人,这样演讲者就可以专注于演讲和现场问答,”* Terasaki说。 - -*"Choosing the right event platform is the key for success. A great user interface with multiple engagement tools and functions that attendees are looking for at virtual events is imperative,"* Terasaki added. +**选择平台** +如果你在规划线上活动,你将需要密切关注平台的选择,因为它们有很多重要的差异。 -Events held in physical venues also require careful attention to apps and networking platforms. Some of the options are flexible enough to successfully pull off cross-over duties between virtual and physical, which may make them useful going forward with blended venues. - - - -*"MeetingPlay started as a networking app. They have done a very good job of pivoting to be a virtual event platform. That's one that we've been really happy with,"* says Brown. - - - -*"For physical events, we do have some options we like for networking and to facilitate people meeting each other at events. One that we use is an app called Brella, which is really a networking app, but it's not a full-blown event app that we would keep a schedule on and do push notifications. It's really just for networking and it has an event matchmaking feature on it,"* Brown explained. - - - -Make sure your expectations and goals are aligned when deciding to use these types of apps. - - - -*"For example, in an Open Source Summit, I'd say probably only 15% or 20% of people actually like using Brella or any other app, but the people who are using it, get huge value out of it,"* says Brown. - -**Soliciting volunteers** - -Start by identifying the tasks, dates and times you need volunteers to help out. - - - -*"You can't do this by yourself, you have to have volunteers to help with this initiative. I look for ‘day of’ volunteers as well as folks who want to help with some of the organizing, but mostly ‘day of’ is the most important,"* said Saebi. - - - -*"A few things to check that your ‘day of’ volunteers can help you with is, will there be a check-in station for when your conference attendees arrive? And there should be,"* Saebi added. - - - -Soliciting volunteers for a physical or a virtual event can be challenging. But there are several ways one can be successful in the endeavor. Take for example, how Salesforce manages and encourages volunteerism. - - - -Volunteer Time Off is a formal program at Salesforce. It begins on the first day of employment when, as part of their on-boarding, new employees often go to volunteer somewhere with their on-boarding class. Volunteering is thus established early on as both the spirit of the company culture and as an ongoing job expectation. - - - -*"Volunteering is really a core part of our business and that's well enshrined in company programs and well supported. So, we thought let's tap into that to help people make those first contributors to Open Source. To help them get over that hump of the initial barrier of having never contributed to Open Source before in such a way that we are both raising awareness of our reliance on Open Source and on Open Source’s reliance on volunteers,"* said Simmons. - - - -It turns out that Volunteer Time Off is an excellent source for volunteers for open source events as well. - - - -*"So much of this is trial and error. Like all Open Source program offices are trying to figure this out. We also try to tie volunteer hours to exact metrics to see if the event or topic is something that is of interest to people,"* said Arvin. - - - -She cited an example of how volunteer metrics translate to a broader interest in an open source event. For example, if the Salesforce OSPO aims for 40 people to volunteer at an event and end ups getting 50, then the company has a strong indication that people are interested in the topic or event. But if just 15 volunteers responded instead, then that is a strong indication that the event isn’t a good draw or that the marketing may be off target. - -*"Having those metrics also gives us a baseline of what our employees are interested in doing. And it tells us what is working in spreading the word of Open Source,"* Arvin said. - -**Gifts, swag and acknowledgments** - +*“我们比较了65个不同的线上活动平台,许多平台只是用于内容传递。而显然,对于Linux基金会的活动而言,我们需要的东西与之不同,”* Brown说。 +[Linux基金会的平台比较结果](https://docs.google.com/presentation/d/1jGd0geh72Lxr0o3zV044K5yhXc6Q8tp4p8fhnnXJsqo/edit#slide=id.p3)现在可以免费获取。Brown表示,你需要定期查看,因为这是一个动态文档。以下是截至2020年9月的部分结果: -Gifts, swag, and acknowledgments remain important elements in event planning. Generally, they are used to reward, thank, and incentivize speakers, volunteers, attendees, sponsors, and communities. - - - -It was wise to order these items early as traditionally it takes longer than you’d think to have the items made and delivered on time. Early orders also give you a chance to have changes made if something is wrong with the order or a vendor fails to follow through. But given recent cutbacks in the U.S. Postal Service and the extraordinary workloads other carriers are dealing with during a pandemic, it’s wise to order even earlier than normal. - - - -And, yes, you can give gifts, swag, and acknowledgements in virtual events too. Some of these can even be digital such as a month of a TV or video streaming service, or credits on riding services like Uber or Lyft. Credits on food services such as Instacart or UberEATS is another idea. Of course, many event organizers also send traditional gifts, particularly to speakers and volunteers. Your budget will affect your gift and swag choices too. - - - -Just be careful to think your choices through to avoid pitfalls. For example, don’t give credits to digital services unless you’re sure those services are available locally for speakers, volunteers, or other giftees. There are also other things to consider, depending on location and other factors. - - - -"One time, I got the speakers really nice gift baskets which included mugs and fruit and all kinds of nice goodies. But the speakers couldn’t fit those in their carry-ons. I felt so bad. So, if you're buying a gift for people who are traveling, make sure that it's something they can travel with," said Saebi. - - - -Think back to swag and gifts you’ve received or seen at other conferences. That’s likely to help you come up with good ideas for yours. - - - -For example, Saebi says that one of the best gifts she received at a conference, she’s still using today. *"I've been using it through the quarantine as well, it was from the Linux Foundation for the Open Source Summit, North America. I want to say either, I think Los Angeles maybe, or maybe Vancouver, but it's a cutting board that looks like a surfboard. It's amazing. So yeah, I think personalized gifts like that are really nice,"* she said. +![platform comparison](/img/guides/organizing-and-managing-open-source-events1.jpg) - +![speciality platfomr comparison](/img/guides/organizing-and-managing-open-source-events2.jpg) -Before shopping for gifts, make sure to make a list of everyone who should receive something, and then buy a few extras for volunteers who join last minute or people you may have initially overlooked, like moderators or an emcee. +Linux基金会还在每次活动后记录组织者对每个平台的体验,给会员提供更详细的成功与失败的分析。你可以在活动主页上的[博客文章](https://events.linuxfoundation.org/2020/06/03/success-with-qiqochat/)中找到这些内容。 - +Google也在寻找专门的特性和功能。 -Recognitions can take the form of gifts or public shoutouts. Often, organizers choose to do both. +*“我们重视合规、安全、多元化、包容性、以及易用性。我们尽量特别关注这些,并调整在线活动的环境。我们有字幕吗?录制平台是否有让演讲者改变演讲者注释字体大小的功能?如此等等,”* Terasaki说。 - +*“选择合适的平台是成功的关键。一个具有多种参与工具和功能的优秀用户界面是与会者在线上活动中寻找的必要条件,”* Terasaki补充到。 -*"I usually do include recognitions in the beginning and at the end of the event. But those should be personalized too. For example, some people are shy and they don't like public attention. So I don't say, "Hey, stand up, wave your hands." Some of them would say they hate that experience. And so, I think just calling their name out is good enough,"* said Saebi. +在线下场所举办的活动同样需要仔细关注app和社交平台。其中一些选择非常灵活,可以成功完成线上和线下活动之间的交叉任务,这可能会使它们在混合场景中大有用武之地。 - +*“MeetingPlay最初是一个社交应用。他们在转型为线上活动平台方面做得非常好,这是我们非常满意的一个平台,”* Brown说。 -Often volunteer are given matching tee- shirts with the event logo on them if it's a big external event. Stickers, even general open source stickers, are a big hit with volunteers and attendees. Both stickers and tee shirts are often on a table for the taking by attendees and volunteers, so you may want to add something a little extra just for volunteers. +*“对于线下活动,我们确实有一些喜欢的选择,用于建立联系,方便人们在活动中相互认识。我们使用的一个应用叫Brella,它实质上是一款社交应用而不是一个功能全面的活动管理应用,我们不会在上面保存日程以及推送通知。它实际上只是用来建立关系网的,上面有一个活动匹配功能,”* Brown解释到。 - +在决定使用这些类型的应用时,请确保你的期望和目标是一致的。 -And, it’s perfectly ok to regift swag too. After all, spreading the word of other conferences, communities and projects is entirely the point of stickers and swag, so feel free to spread it around. +*“例如,在一次开源峰会上,我认为可能只有15%或20%的人真正喜欢使用Brella或其他任何应用,但那些使用它的人却能从中获得巨大的价值,”* Brown说。 - -*"I always take other swag as well from other open source conferences, especially for our internal events because not everybody has the opportunity to go to let's say Open Source Summit, North America. So in that case, Nithya, myself, and members of our team, we always have extra swag and extra stickers to offer later,"* said Shilla Saebi. +**招募志愿者** -**Registration** +首先,确定你需要志愿者帮忙的任务、日期和时间 -Registration fees continue to be a vexing issue. +*“光靠你自己是不行的,必须有志愿者来帮助开展这项活动。我既寻找‘当天’的志愿者,也寻找愿意帮助做一些活动组织工作的人,但大多数情况下还是‘当天’的志愿者最重要,”* Saebi说。 -*"Most of our events have been free. We may have done one where it was external facing and we charged a small fee and we noticed that it was harder to get people to register. But charging a fee helps reduce no shows so it’s a difficult decision,"* said Saebi. +*“‘当天’志愿者可以帮助你做的几件事是:当与会者到达时,是否会有签到站?应该有的,”* Saebi 补充道。 -Comparing your event with similar events is often a good way to measure market expectation and response. +为线下或线上活动招募志愿者可能会有一定挑战。但有几种方法可以使这一努力取得成功。以Salesforce如何管理和激励志愿服务为例。 -*"We very much look at what everyone else is charging. Like most folks who are planning open-source events, we’re trying to cover the cost of the event rather than make money on it,"* said Brown. +志愿者假期是Saleforce公司的一项正式计划。这从员工入职第一天就开始了,作为入职培训的一部分,新员工通常会跟随他们的入职培训课程一起去某个地方做志愿者。因此,志愿服务很早就被确立为公司的文化精神和持续的工作期望。 -While traditional tech events charge up to $4,000 or even more for people to attend an event, open source events rarely command similarly high fees. +*“志愿服务确实是我们业务的核心部分,这在公司计划中得到了很好的体现和支持。因此,我们想利用这一点来帮助人们成为开源的第一批贡献者。帮助他们克服从未为开源做出过贡献的最初障碍,这样,我们既提高了人们对我们依赖开源的认识,也提高了人们对开源依赖志愿者的认识,”* Simmons说。 -*"In the US, companies understand the value of a developer going to a conference, so they often fund several conferences throughout the year. But there are still a lot of countries where that's not true and developers have to foot the bill on their own,"* said Brown. +事实证明,“志愿者假期”也是开源活动志愿者的绝佳来源。 -*"China and Japan are both great examples where we simply can't charge the same registration fees there. We have to be very careful where we hold events because developers do not get travel budgets to go to events. They barely get any money to go to attend an event or a registration fee. You really have to think about what that local market will actually bear too,"* said Brown. +*“这其中有很多都是反复试验的过程。就像所有的开源项目办公室都在努力解决这个问题一样,我们还尝试将志愿者时间与具体指标联系起来,来了解活动或主题是否对人们有吸引力,”* Arvin说。 -Economic cycles also affect what can be charged for registration and sponsorships. There are other considerations to how to handle registrations as well, such as GDPR and privacy policies. Compliance with the various privacy regulations must be maintained in the registration process and everything that occurs afterward. +她举例说明了志愿者指标如何转化为对开源活动的更广泛兴趣。例如,如果Salesforce OSPO的目标是在一个活动中招募40人做志愿服务,结果有50人报名,那么公司就能收到人们对这个主题或活动感兴趣的强烈信号。但如果只有15名志愿者报名,那就充分说明活动的吸引力不强,或者活动宣传可能偏离了目标。 -*"You really want to be careful of that in your registration. Let people know you're going to be sharing their contact information, because you're legally obligated to do so. It is important to get the right verbiage in there, especially if you're going to have sponsors that you're giving any information to,"* said Brown. +*“有了这些指标,我们也就有了一个了解员工对哪些活动感兴趣的基准。它还告诉我们传播开源的哪些方法是有效的,”* Arvin说。 -Be sure to print any materials you’ll need from marketing and directional signage to banners and attendee handouts a month or more ahead of the event. Typically, attendee materials, including event stickers, are distributed at registration. -*"We put stickers on all the tables that people are sitting at, stickers for the actual event,"* said Saebi. *“Make sure to get the pronouns of your speakers. And ideally you should perhaps even ask for pronouns when people are checking in to the conference. If you have pronoun stickers like she, her, they, them, that'll be nice to add on the sticker table as well.”* +**礼物、纪念品和答谢礼** -Registration desks also have swag readily available as well as name tags, lanyards and other event items. These can also be used in virtual events in various ways from standard pics or avatars, to a variety of gamification options. +礼物、纪念品和答谢礼仍然是活动策划中的重要部分。通常,它们用于奖励、感谢和激励演讲者、志愿者、参会者、赞助商和社区。 -**Hashtags** +提前订购这些物品是明智的,因为通常制作和准时交付这些物品需要的时间比你想象的要长。提前订购也让你有机会在订单出问题或供应商未能履行承诺时进行更改。但是,考虑到美国邮政服务最近的裁员和其他运输公司在疫情期间的超负荷工作量,比平时更早订购是明智之举。 +是的,你也可以在线上活动中送出礼物、纪念品和答谢礼。有些甚至可以是数字形式的,例如一个月的电视或视频流媒体服务,或者像Uber或Lyft这样的打车服务积分。Instacart或UberEATS之类的食品服务积分也是一个选择。当然,许多活动组织者也会送传统礼物,特别是给演讲者和志愿者。你的预算也会影响你对礼物和纪念品的选择。 -Social media is as strong as ever in promoting and recording events. A well-chosen hashtag is therefore essential to your efforts. +选择时一定要深思熟虑,避免陷阱。例如,不要赠送数字服务积分,除非你确定演讲者、志愿者或其他受赠者在当地可以使用这些服务。根据地点和其他因素,还有其他需要考虑的事项。 - +“有一次,我给演讲者们准备了非常不错的礼品篮,里面有马克杯、水果和各种好吃的东西。但演讲者的手提箱装不下这些东西。我心里很不是滋味。所以,如果你要给旅行的人准备礼物,一定要确保是他们可以随身携带的,”Saebi说。 -Typically, hashtags are set up prior to the event and generally plastered everywhere during the event. +回想一下你在其他会议上收到或见过的纪念品和礼物。这可能会帮助你为自己的礼物想出好点子。 - +例如,Saebi说她在一次会议上收到的最好的礼物之一,她至今仍在使用。*“我在疫情期间都在使用它,它是来自Linux基金会北美开源峰会的礼物,我记得可能在洛杉矶或温哥华,它是一个像冲浪板的砧板。非常棒。所以,我觉得个性化的礼物是很不错的主意,”* 她说。 -*"The hashtag is really helpful because if I have a unique hashtag on Twitter for a certain event, I can actually go back and look at all the tweets from three years ago or two years ago from that event. And you can keep that same hashtag going for future events, or however you want to do it. But it's nice and useful thing to have,"* said Saebi. +采购礼物之前,请务必列出一个所有应该收到礼物的人员的名单,然后多买一些给最后一刻加入的志愿者或你最初可能忽略的人员,如主持人或司仪。 - +表彰的形式可以是赠送礼物,也可以是当众欢呼。通常,组织者会选择两者兼而有之。 -*"And it gives people a platform or idea or an area to go. I know a lot of people congregate on Twitter. I also make sure to tell the speakers to put their Twitter handles on their slides. They don't have to, it's just a suggestion in case people want to reach out to them,"* Saebi added. +*“我通常会在活动开始和结束时进行表彰。但这些表彰也应该是个性化的。例如,有些人比较害羞,不喜欢被公众关注。所以我不会说‘嘿,站起来,挥挥手’。有些人会说,他们讨厌这种经历。因此,我认为只要喊出他们的名字就足够了,”* Saebi说。 -**Side events and break planning** +如果是大型外部活动,志愿者通常会得到印有活动logo的T恤。贴纸,即使是普通的开源贴纸,也很受志愿者和与会者的欢迎。这些贴纸和T恤通常放在桌子上供参与者和志愿者领取,因此您可能会希望为志愿者额外添加一些东西。 -It’s general knowledge that neither speakers nor attendees are keen on early morning events and talks. What may not be so generally known is that fact holds true for virtual events as well. People may be attending from home, but their early mornings tend to be a bit frantic, especially if there are kids to get to school and pets to walk. +而且,重新赠送纪念品也是完全可以的。毕竟,传播其他会议、社区和项目的信息正是贴纸和纪念品的目的所在,所以随意传播这些信息吧。 -*"Now I start at 9:30 AM or 10:00 AM, and then we leave 30 minutes or an hour in the morning for people to congregate and eat breakfast. I think 9:00 AM start time may work as well. But I usually do 9:30 or 10. Considering that we do after events too at physical events, it can be really exhausting on people to be on for 12 or 14 hours that day,"* said Saebi. +*“我总是从其他开源会议上带回纪念品,特别是为我们的内部活动,因为并不是每个人都有机会参加诸如北美开源峰会这样的活动。所以在这种情况下,Nithya、我和我们团队的成员,总是会有一些额外的纪念品和贴纸可以在后续提供,”* Shilla Saebi说。 -Don’t drag the day on too long for virtual events either. -*"It's one thing to get someone to attend a virtual event, but what's your dwell time going to be? How long is someone going to stick around? That's the big question that we are trying to figure out because what that looks like in this first round of virtual events that we do is going to help us decide what we do with the ones after that. But there are related questions too such as is a full day just too long and we need to break these up into couple hour increments a day and do them for more days or do something entirely different,"* said Brown. +**活动注册** -The length of events matters significantly. Based on surveys and feedback, Comcast found that neither speakers or attendees like one hour talks. -*"Those are too long. I try to do shorter talks. If it's a keynote, we can do 30 minutes, maybe 35 minutes max. But typically, the talks are 25 to 30 minutes, keep them short and sweet,"* said Saebi. +注册费一直是一个令人头疼的问题。 -Similarly, Comcast found that talks need to be short in virtual events as well. +*“我们的大多数活动都是免费的。我们可能做过一次面向外部的活动,收取了少量费用,我们发现这更难让人们注册。但是收费有助于减少缺席率,所以这是一个困难的决定,”* Saebi说。 -*"People are getting Zoom exhaustion and conference call exhaustion and video chat exhaustion. We're trying to avoid doing eight-hour days. We're breaking up talks into much smaller sessions over more days but shorter hours per day,"* said Saebi. +将你的活动与类似活动进行比较通常是衡量市场期望和反应的好方法。 -It’s a common problem for all event organizers on the moment, but it probably bodes well for events post-pandemic. +*“我们非常关注其他人的收费情况。和大多数策划开源活动的人一样,我们试图覆盖活动的成本,而不是从中赚钱,”* Brown说。 - "There's a huge challenge because one, people are stuck at home. You could argue that they will have no problem sitting in front of their computer all day at a conference. But the flip side of that is people are tired of being stuck at home. As things open up, people just want to get out of the house and experience some semblance of normal life again," said Brown. +传统科技活动的参会费用高达4000美元,甚至更高,而开源活动却很少收取类似的高额费用。 -Socializing and networking have always been big draws at conferences. That’s why breaks should remain frequent and certainly placed between every talk. In physical events this allows for the always popular and beneficial hallway track. Most organizers are still struggling to create a similar experience in virtual events. However, experiments are currently underway. +*“在美国,公司了解开发人员参加会议的价值,所以他们通常会每年资助几场会议。但在很多国家,情况并非如此,开发者必须自己承担费用,”* Brown说。 -*"I recently went to the InnerSource Commons event where they had virtual breakout rooms. You could actually be moved into another Zoom room with other folks and just kind of relax and have a more chill conversation and then go back to the main conference when you want. I thought that was really good,"* said Saebi. +*“中国和日本是两个很好的例子,在那里我们根本无法收取相同的注册费。我们必须非常谨慎地选择举办活动的地点,因为开发者没有参加活动的差旅预算。他们几乎没有钱去参加活动或支付报名费。你也必须考虑当地市场的实际承受能力,”* Brown说。 -Evening events are common at physical venues. These can last from 30 minutes to a couple hours and can be anything from mixers to dinners, but they always have a social and networking vibe. Distributing virtual or physical drink tickets, usually limited at two per person, controls the cost and limits excessive drinking as it reinforces the code of conduct. Tickets are good for alcoholic drinks but other drinks as well such as water, coffees, juices, and sodas. +经济周期也会影响注册和赞助的收费标准。关于如何处理注册方面还有其他考虑因素,如GDPR和隐私政策。在注册过程中以及注册后的所有工作中,都必须遵守各种隐私法规。 -Other questions organizers will need to answer in advance include whether the event should be private and if so does it need a passcode. Do you need to send invitations or will an announcement on Slack or social media work as well or better? +*“在注册时,你真的要注意这一点。让人们知道你会分享他们的联系信息,因为在法律上你有义务这样做。重要的是要有正确的措辞,特别是如果你要向赞助商提供任何信息的话,”* Brown说。 -**Code of Conduct** +确保在活动开始前一个月或更早就打印好你需要的所有材料,从营销和指示标牌到横幅和参会者手册。通常,包括活动贴纸在内的参会者材料,会在注册时发放。 +*“我们在人们坐的所有桌子上都贴上了贴纸,这些贴纸是为实际活动制作的,”* Saebi说。*“一定要弄清楚你的演讲者的称谓词。理想情况下,你甚至应该在人们进行会议签到时询问称谓词。如果你有她、他、他们这样的称谓词贴纸,那么在贴纸桌上增加这些会很好。”* -The Code of conduct remains critically important to any event, physical or virtual. +签到台还提供纪念品以及姓名标签、挂绳和其他活动物品。这些物品也可以通过各种方式在线上活动中使用,从标准图片或头像到各种游戏化选项。 - -*"I'm proud to say we're one of the first open-source organizations and events that had one at their events," says Brown. She says the Linux Foundation’s code of conduct is freely available in the creative commons license and “anyone may pull from it.”* +**社交话题标签** - -However, just having a code of conduct alone is not enough. It is important to distribute your code of conduct before and during events and regularly point people to it. +社交媒体在宣传和记录活动方面一如既往地强大。因此,一个精心选择的话题标签对你的工作至关重要。 - +通常,话题标签在活动前设置好,并在活动期间广泛使用。 -*"We put it out at registration on a banner, it's very easy to find on our website. It goes out on our email communications. We mention on the keynote stage. You also need to make sure that whoever is running your conference knows how to address any code of conduct issues that come up,"* said Brown. +*“话题标签非常有用,因为如果我在Twitter上为某个活动设置了一个独特的话题标签,我实际上可以回过头来看三年前或两年前关于那个活动的所有推文。而且你可以在未来的活动中继续使用相同的话题标签,或者按你想要的任何方式去使用它。这是一个很好且有用的工具,”* Saebi 说。 - +*“它给人们提供了一个平台、想法或去处。我知道很多人都聚集在Twitter上。我还会确保告诉演讲者在他们的幻灯片上放上他们的 Twitter 账号。他们不一定要这样做,这只是一个建议,以防有人想要联系他们,”* Saebi 补充道。 -Comcast uses its own existing code of conduct for internal events. And uses a template to compose one for external events. Other organizations do similarly. +**附带活动和休息计划** -**Food and drinks planning** +众所周知,演讲者和与会者都不喜欢清晨的活动和演讲。可能大多数人不知道的是,线上活动也是如此。人们可能会在家参加活动,但他们的清晨往往有些匆忙,尤其是如果有孩子要上学、宠物要遛弯的话。 +*“现在,我在上午9:30或10:00开始活动,然后在早上留出30分钟或一个小时的时间让人们聚在一起吃早餐。我认为上午9:00开始也可以。但我通常会选择9:30或10:00。考虑到我们在线下活动中也会有后续活动,这一天连续12或14个小时对人来说会非常累,”* Saebi说。 -Food and drinks are part of the necessary planning in physical events. If the event is internal and held on company grounds, food and drink options are often limited to what the company’s selected caterer offers. However, there are a few planning tricks that can make that easier to arrange. +线上活动也不要拖得太久。 - +*“让人们参加线上活动是一回事,但是他们会停留多久呢?他会坚持多久?这是我们正在试图弄清楚的一个大问题,因为我们在首轮线上活动中的这些情况,将帮助我们决定如何规划之后的活动。但是还有一些相关的问题,比如一整天是否太长,我们是否需要将活动分成每天几小时,持续更多天,或者完全另辟蹊径,”* Brown说。 -*"I place an order through the catering company for the maximum for our internal venue, which is 300 people. And then I ask how late I can adjust the order. Typically caterers will give you two weeks which is great because by then you’ll have a much better idea how many people are expected to attend that event,"* said Saebi. +活动时间的长短非常重要。根据调查和反馈,Comcast发现演讲者和与会者都不喜欢长达一小时的演讲。 - +*“那些太长了。我尽量做短一点的演讲。如果是主题演讲,我们可以讲30分钟,最多35分钟。但通常情况下,演讲时间在25到30分钟之间,要短小精悍,”* Saebi 说。 -*"I learned that little trick from wedding planning, because that's how it was for our wedding. So I started asking the same thing for conferences and discovered that I don't have to have the exact number today, as long as they give me the date of when they need it by,"* Saebi added. +同样,Comcast公司发现线上活动的演讲也需要简短。 - +*“人们正经历着Zoom疲劳、电话会议疲劳和视频聊天疲劳。我们尽量避免每天八小时的活动。我们将演讲分成更短的会议,持续更多天,但每天的时间较短,”* Saebi说。 -Besides a headcount, you’ll need to consider varying dietary needs such as diabetic, gluten-free, vegan, vegetarian, kosher, and keto diets. Coffee, tea, diet drinks, sodas, and water should be plentiful and available all day. +这是目前所有活动组织者面临的共同问题,但这可能对疫情后的活动有利。 - +“这是一个巨大的挑战,因为一方面,人们被困在家里。你可以说他们坐在电脑前参加一整天的线上会议没有问题。但另一方面,人们已经厌倦了被困在家里。当情况好转时,人们只想走出家门,重新体验一些正常的生活,”Brown说道。 -This is also an area where you may need a volunteer to lend a hand. +社交和建立人脉一直是会议的重要吸引力。因此,休息时间应保持频繁,而且一定要安排在每场演讲之间。在线下活动中,这就为一直很受欢迎且有益的走廊交谈创造了条件。大多数组织者仍在努力为线上活动创造类似的体验。然而,目前尚在实验中。 - +*“我最近参加了 InnerSource Commons 的活动,那里有虚拟的分组讨论室。实际上,你可以和其他人一起进入另一个 Zoom 会议室,放松一下,进行更轻松的对话,然后在需要的时候再回到主会场。我觉得这样很好,”* Saebi说道。 -*"Assign one person to be the contact for the caterer. All they have to do is answer their phone when the caterer calls and let them in the venue. Everything else, including the bill, is taken care of in advance, so the only additional thing the volunteer might need to do is maybe guide the caterers to where they need to go,"* said Saebi. +晚间活动在实体场所很常见。这些活动可以持续 30 分钟到几个小时不等,可以是社交聚会或晚宴等任何形式,但总是带有社交和建立人脉的氛围。分发虚拟或实体饮品券(通常每人限购两张)既能控制成本,又能限制过量饮酒,因为它强化了行为规范。饮品券不仅适用于酒精饮料,也适用于其他饮料,如水、咖啡、果汁和苏打水。 - +组织者需要提前回答的其他问题包括:活动是否应该是非公开的,如果是,是否需要密码。是否需要发送邀请函,还是在Slack或社交媒体上发布公告效果更好? -Once the menu is decided, make it known to attendees when and where the food is, and what’s on the various available menus. If you’re not serving lunch or dinner, offer a list of nearby restaurants and cafes so attendees can easily see their options. - +**行为准则** -Food and drinks for evening events must also be based on a range of dietary restrictions. Mixers can rely on light appetizers only while dinners may contain several courses and menu options. Dining and drinking venues within walking distance of the event venue or hotels generally work best as it simplifies transportation issues. +行为准则对于任何活动都至关重要,无论是线下活动还是线上活动。 - +Brown说:*“我很自豪地说,我们是最早在活动中制定行为准则的开源组织之一。”* 她说,Linux 基金会的行为准则通过知识共享许可协议(CC)免费提供,*“任何人都可以拉取使用。”* -However, the pandemic may have permanently changed how food is served in future physical events, at least during the event itself. +然而,仅有行为准则是不够的。重要的是要在活动前和活动期间分发行为准则,并定期引导人们了解它。 - +*“我们在注册时会在横幅上展示它,在我们的网站上很容易找到。我们的电子邮件通讯也会发布。我们在主题演讲时提到它。你还需要确保负责会议的人知道如何处理任何出现的行为准则问题,”* Brown说。 -*"Communal food may shift to grab-and-go, pre-packed boxes moving forward instead of buffets,"* said Cruz. +Comcast公司在内部活动中使用现有的行为准则,并使用模板为外部活动编写行为准则。其他组织也是如此。 - -In virtual events, food and drink are choices made by the individual attendee. The alternative is to offer digital credits with food delivery apps so attendees can have a meal or respite together in a casual Zoom or other platform networking room. +**食物和饮品规划** -**Followups** +食物和饮品是线下活动必要规划的一部分。如果活动是在公司内部举行,那么食物和饮品的选择通常仅限于公司选定的餐饮供应商提供的。然而,有一些规划技巧可以使这一安排更加容易。 -While patterns were set, trends made, and playbooks refined before the pandemic, everything was upended after the pandemic hit and will likely change again once the pandemic subsides. This makes followup evaluations all the more crucial in adapting and improving the function, performance, and attendance in future events. +*“我通过餐饮公司订购内部场地最多可容纳人数(300人)的餐饮。然后我询问可以调整订单的最晚时间。通常情况下,餐饮公司会给你两周的时间,这非常好,因为到那时你就能更清楚预计有多少人会参加这次活动了,”* Saebi 说。 - +*“我从婚礼策划中学到了这个小技巧,因为我们的婚礼就是这样安排的。因此,我开始对会议提出同样的要求,发现我不一定今天就要给出确切的数字,只要他们告诉我需要的日期就可以了,”* Saebi 补充说。 -Post-event surveys are a steadfast measure on everything from speaker performance to event relevance and the general enjoyment factor. Typically, the results are used by organizers for future event planning, but not always. Positive remarks are often shared with the speakers who earned them. And positive comments about the event are often used in marketing materials for future versions of the same event. +除了人数统计,你还需要考虑不同的饮食需求,如糖尿病、无麸质、素食、素食者、犹太洁食和生酮饮食。咖啡、茶、低糖饮料、苏打水和水应该全天充足供应。 - +这也是你需要志愿者帮忙的地方。 -Further, snippets or full videos of speakers are sometimes shared with speakers for inclusion in their own work portfolios, on YouTube, and to market future events. +*“指定一个人与餐饮公司联络。他们要做的就是在餐饮公司打电话时接听并让他们进入场地。其他一切,包括账单,都是提前处理好的,所以志愿者可能需要做的唯一额外事情就是带领餐饮公司的人员到他们需要去的地方,”* Saebi说。 - +一旦菜单确定下来,要让与会者知道食物的供应时间和地点,以及各种菜单上都有什么。如果不提供午餐或晚餐,则应提供一份附近餐馆和咖啡馆的名单,以便与会者查看他们的可选项。 -Comcast, like many companies, has a tight policy around making and sharing videos of speakers at events. Speaker consent is one of the top requirements. Costs are another determining factor. Even so, videos are only shared internally with "strict guard rails around anything requiring legal compliance." +晚间活动的食物和饮品也必须符合各种饮食限制。社交聚会可以只提供清淡的开胃菜,而晚宴则可能包含多道菜肴和菜单选项。距离活动地点或酒店步行即可到达的餐饮场所通常效果最佳,因为这样可以简化交通问题。 - +然而,疫情可能永久性地改变了未来线下活动中食品的供应方式,至少在活动期间是如此。 -*"If the venue has AV options and if they are not that expensive, we'll ask them to record it and then we can post it on our open source program office website. We’ve also recorded some ourselves, taken pictures ourselves, and hired a photographer sometimes as well,"* said Saebi. +*“公共食品可能会从自助餐转变为即拿即走、预先包装好的盒装食品,”* Cruz说。 - +在线上活动中,食物和饮品是由每位参会者自己选择的。另一种方案是提供送餐应用的数字积分,这样参会者可以在Zoom或其他平台的休闲网络会议室中一起用餐或休息。 -Following up to thank the volunteers is also essential. Consider sending thank you cards and notes, or even small gifts. Adding the results of their efforts- such as growth in attendance or accolades from attendees -- to the thank you notes is also a good touch. - +**活动后续跟进** -Followup activities can also be used to extend the experience between events and encourage further engagement. - +虽然在疫情之前已经确定了模式,形成了趋势,并完善了游戏规则,但疫情爆发后一切都被颠覆,并且一旦疫情消退,一切可能再次发生变化。这使得后续评估对于调整和改进未来活动的功能、表现和参与度方面变得更加重要。 -*"We do try to make sure that people leave with something tangible to do. For example, we may make some suggestions on how attendees can find a project to work on after the event, such as after Tech Talks, the Open Source Tech Talks and the volunteer events,"* said Simmons. *“We also suggest places to go to get support. Ultimately, we want to make sure they feel strong and empowered coming out of those events.”* +活动后调查是衡量演讲者表现、活动相关性和总体愉悦程度的可靠标准。通常,组织者会将调查结果用于今后的活动规划,但并不总是如此。积极的评价通常会分享给获得这些评价的演讲者。而有关活动的正面评论则通常会被用于未来同类活动的营销材料中。 -There are also followup activities that can help your brand benefit from its efforts in providing useful events. +此外,演讲者的演讲片段或完整视频有时也会分享给他们,用于其个人作品集、YouTube以及推广未来的活动。 -*"We're very careful about not spamming people but we do send one email that offers more information on different points of interest with links to our Open Source page, our blog, highlights from the booth, and information about any demos that we shared for any of the external events,"* said Arvin. +与许多公司一样,Comcast 对制作和分享活动中演讲者的视频有严格的规定。征得演讲者同意是首要条件之一。成本是另一个决定因素。即便如此,鉴于“对任何需要法律合规的内容都有严格的管控措施”,视频也只在内部共享。 - +*“如果会场有音视频设备且费用不高,我们会请他们录制,然后发布在我们的开源项目办公室网站上。我们也自己录制过一些内容,自己拍过照片,有时也会聘请摄影师,”* Saebi说。 - +后续感谢志愿者也很重要。可以考虑寄送感谢卡和感谢信,甚至是小礼物。在感谢信中加上他们努力的成果,如出席人数的增长或与会者的赞誉,也是不错的做法。 -## Marketing an open source event +后续活动还可以用于在活动之间延续体验并鼓励进一步的参与。 - +*“我们会尽量确保人们离开时有一些实实在在的事情可以做。例如,我们可能会针对与会者在活动结束后如何找到一个项目来开展工作提供一些建议,比如之后的技术讲座、开源技术讲座和志愿者活动,”* Simmons说,*“我们还建议了一些寻求支持的地方。最终,我们希望确保他们在这些活动后感到强大和充满力量。”* -Marketing is the key to success for any event, regardless of venue. Marketing tactics will vary according to size and type of event and the goals the organizers intend to achieve. +还有一些后续活动可以帮助你的品牌从提供有用的活动中受益。 - +*“我们非常小心,不会向人们发送垃圾邮件,但我们会发送一封电子邮件,提供更多关于不同兴趣点的信息,并附上我们开源页面、博客、展位亮点以及我们在任何外部活动中分享的演示信息的链接,”* Arvin说。 -However, below are some marketing tips, strategies, and tactics that tend to work out well for many events. - +## 开源活动营销宣传 -**1) Leverage social media:** Publicize events on social media channels because messages there can be shared more broadly than to the number of people you have on a mailing list. Consider buying ads on Google, Facebook, and others too. - +营销是任何活动成功的关键,无论活动地点在哪里。营销策略会根据活动的规模、类型以及组织者希望达成的目标而有所不同。 -**2) Email campaigns work well:** Mailing lists fuel email campaigns. When cultivated and maintained carefully mailing lists can extend the reach beyond the lists of attendees from past events. Typically, the email schedule for a n email campaign is: +但是,以下是一些对许多活动来说都效果良好的营销技巧、策略和战术。 - -a. Announce an upcoming event +**1) 利用好社交媒体:** 在社交媒体渠道上宣传活动,因为与邮件列表中的人数相比,社交媒体渠道上的信息分享可以覆盖更多人群。还可以考虑在Google、Facebook等平台上购买广告。 -b. Push for submissions -c. Reminder for the approaching deadline for submissions + **2) 电子邮件宣传效果很好:** 邮件列表是电子邮件宣传的助推器。只要精心培养和维护,邮件列表的覆盖范围就能超越以往活动的与会者名单。通常,N次电子邮件宣传的时间表如下: -d. Announce the keynotes -e. Announce the event schedule +a. 宣布即将举行的活动 -f. Communicate highlights of various aspects of the event -g. Communicate opportunities for networking, socializing, and nearby attractions +b. 推送议题申请消息 -h. Event followup emails - +c. 提醒议题申请截止日期即将到来 -**3) Lean in on the power of word of mouth:** Reach out to open source communities who will have an affinity for the topic or the event and to local open source groups to spread the word, help build audience numbers, and attract volunteers. - +d. 公布主题演讲 -*"If you're in, for example, Austin and you're holding a local event for primarily the Austin open-source community, there are a ton of companies locally that you can reach out to. Whether that is companies like Home Depot or IBM that have big open-source development centers there, or whether it's reaching out to the local tech and open-source organizations of which there are a lot,"* said Brown. - +e. 公布活动日程 -**4) Create media partnerships:** Ideas on ways to leverage media partnerships include being added to their calendar of events, an exchange of results or services, advertise their and your events on the respective websites, ask for press coverage of the event for additional promotion for it, develop educational opportunities for the community, and other mutually beneficial activities that grow both audiences. - +f. 传达活动各方面的亮点 -**5) Cross-promote two or more events:** *"I met with the team that runs our engineering Tech Talks and asked for their assistance ahead of time. They put it on all of the channels where they promote their Tech Talks. Anything basically where they announce and promote upcoming events, they included my event as if it were one of their Tech Talks. But then we had to narrow it down some since they have quite a large following who are interested in other things,"* said Arvin. - +g. 告知建立人脉、社交的机会和附近景点 -**6) Target open source groups:** Post announcements and information on places such as the Open Source back channel and the Open Source chatter, which is to say your intranet system. Also, tag various Open Source specific projects, for example, The Python Group. Further, ask speakers to share it with their teams, their chatter page and their Slack group as well. -However you choose to market your event, be assured that the appetite for more information and more opportunities to network has never waned despite current circumstances and challenges. +h. 活动后续跟进邮件 - -## Lessons Learned +**3) 借助口碑的力量:** 联系对该主题或活动有兴趣的开源社区和当地开源团体,传播信息,帮助增加观众人数,吸引志愿者。 -To the credit of the TODO group, open source communities and organizations, and open source fans, events have continued on despite the challenges. It’s only natural that such an open group would open source the lessons learned so far too: +*“举例来说,如果你在奥斯汀,并主要为奥斯汀的开源社区举办本地活动,那么你可以联系到许多本地的公司。不管是像Home Depot或IBM这样在当地拥有大型开源开发中心的公司,还是当地的技术和开源组织,都有很多可以联系的对象,”* Brown说。 -**1) Project sprints are increasingly of interest:** Sprints for projects are becoming increasingly popular. For example, a sprint for The Python Language is common at Python conferences. Typically, there are several days of sprints. Some are designed to accelerate headway from people who are core to the project while they are in the same physical space with each other. But some are onramps for new contributors, keeping a vital pipeline filled. And some are introductory and ideal for newcomers. +**4) 建立媒体合作伙伴关系:** 利用媒体合作伙伴关系的方式包括将活动添加到他们的活动日历中,交换结果或服务,在各自网站上宣传他们和你的活动,请求媒体对活动进行报道以增加宣传,为社区提供教育机会,以及其他能增加双方受众的互利活动。 - +**5) 交叉推广两个或多个活动:** *“我见了负责我们工程技术讲座的团队,并提前请求他们的协助。他们将我的活动放在所有推广他们技术讲座的渠道上。基本上,任何他们宣布和推广即将举行的活动的地方,他们都包括了我的活动,就好像这是他们的技术讲座之一。但后来我们不得不缩小范围,因为他们有相当多的追随者对其他事情感兴趣,”* Arvin说。 -Consider using sprints as satellite events to your conference to build feeders for projects and languages you support and need support in. But be forewarned, it is not as easy to do as it sounds. +**6)针对开源人群:** 在开源后台频道和开源聊天频道等地方发布活动公告和信息,也就是你的 Intranet 内部网络。同时,给各种特定的开源项目打标签,例如Python Group。此外,请求演讲者在他们的团队、聊天页面和Slack群组中分享这些信息。 - +无论你选择如何推广你的活动,请放心,尽管当前形势严峻,但人们对更多信息和更多交流机会的渴望从未减弱。 -*"We tried and didn't work as well because Salesforce has so many different programming languages, and every team is using a different one. When we tried to make it too specific events, even those outside of Open Source, generally aren't as successful internally. The lesson is that sprints and events can be too narrow,"* said Arvin. - +## 经验教训 -**2) One day conferences tend to be a hit:** Take for example, Salesforce’s one day event planned for 50 people in San Francisco at an offsite venue. that we held it at. More than 50 people showed up and stayed the entire day. The talks were by Salesforce and other companies. Marketing was mostly grassroots with most of the messaging targeting the local community and inviting local speakers. +得益于TODO小组、开源社区和组织以及开源粉丝们的努力,尽管面临挑战,开源活动仍在持续进行。这样的开放团体自然会开源迄今为止的经验教训: - -*"It ended up being a huge success. We had really positive feedback around it and people stayed the whole day. It is always a win when you don't lose people halfway through the event,"* said Arvin. +**1) 项目冲刺越来越受到关注:** 项目冲刺变得越来越受欢迎。例如,在Python会议上,Python语言的冲刺活动就很常见。通常,冲刺会持续数天。一些冲刺旨在让项目核心成员在同一物理空间内加快进展。但有些冲刺是为新贡献者提供的入门渠道,保持重要的后备力量。还有一些是入门性质的,非常适合新人。 - +可以考虑将冲刺阶段作为会议的卫星活动,为你支持和需要支持的项目和语言提供支持。但请注意,这并不像听起来那么容易。 -**3) Maintain bonds for your projects:** Did you lose your maintainer or are they about to leave to work somewhere else? Project contributors are bound to have a lot of questions you’ll need to answer to keep momentum going. +*“我们尝试过,但效果不佳,因为Salesforce有太多不同的编程语言,每个团队都在使用不同的语言。当我们试图把它做得太具体时,即使是那些开源以外的活动,在内部一般也不会那么成功。我们得到的教训是,冲刺和活动的范围可能太窄,”* Arvin说。 - -*"I think it's important to call that out. And not just in the sense of the specific instance and how that ended up being useful for the project because we had the maintainer who was moving on. But because I think that speaks to a broader theme of the importance of events,"* said Simmons. +**2)一天的会议往往很受欢迎:** 例如,Salesforce计划在旧金山一个外部场地举办一天活动,计划招募50人。结果超过50人到场并待了一整天。演讲由Salesforce和其他公司提供。营销主要是草根方式,大部分消息传递都针对本地社区并邀请本地演讲者。 - +*“活动最终取得了巨大成功。我们得到了非常积极的反馈,人们一整天都没有离开。当你没有在活动中途失去人群时,这总是一个胜利,”* Arvin说。 -"Especially when there's change coming with a project. Whether that's a change in the leadership or change in how it's organized, or a big new release. There are communities that have formed organically around these projects and everybody has their own stake and sense of ownership. So when a project hits a point where there's something big happening, that raises a lot of questions for other participants. Events can be an extremely useful forum for helping people address the fear of the uncertainty and organize around what's coming next," Simmons added. - +**3) 维护项目的纽带:** 你是否失去了你的维护者,或者他们是否即将离开去其他地方工作?项目的贡献者肯定会有很多问题需要你来回答,以保持进展。 -**4) Pivot whenever and wherever you need to:** It’s ok to pivot. Especially now when everyone is focused on adapting to a new reality. Don’t hesitate. Pivot and move on is the new fail fast. +*“我认为指出这一点很重要,这不仅仅是指具体的事例,也不仅仅是指因为我们有维护者一直在推进相关工作,所以这对项目最终是有用的。而是因为这反映了活动重要性的一个更广泛的主题,”* Simmons 说。 - +*“特别是当项目发生变化时。无论是领导层的变化,组织方式的变化,还是重大新版本的发布。围绕这些项目自发形成了社区,每个人都有自己的利益和归属感。所以当项目遇到重大变化时,这会引发其他参与者的许多问题。活动可以成为帮助人们应对不确定性并组织下一步行动的极好平台,”* Simmons补充道。 -"If you're not getting traction, or you're not getting support from the organization, or the content is off or you can’t find good speakers, or whatever the case may be that points to a likely fail for the event you had in mind, then pivot. If you're not getting support it doesn't mean it's not an important event, or that it doesn't need to happen. It just means it isn’t working right now," said Arvin. -"It's okay if the end result doesn't look like the original event you had in mind. It can evolve throughout the process. And even with successful events that we've done in the past, the second one is going to look different and so is the third and fourth. We’re always going to be changing and adapting. And that's okay," Arvin added. +**4) 需要时随时随地调整:** 调整是正常的。尤其是现在,每个人都在专注于适应新的现实。不要犹豫,调整和继续前进是新的快速试错法则。 - +“如果你没有获得关注,或者没有得到组织的支持,或者内容不对,或者找不到好的演讲者,或者无论是什么情况表明你计划的活动可能会失败,那就调整。如果你没有得到支持,这并不意味着这不是一个重要的活动,或者不需要举办。这只说明现在它暂时行不通,”Arvin 说。 -**5) Curate documentation to encourage event spread:**. For example, Salesforce curates documentation on how to guides and other material on events so that smaller groups can run events on their own. Salesforce is also looking at open sourcing some of these documents to the larger community as well. But event organizers still are standing by to give advice and otherwise assist as needed. +“如果最终结果与你最初设想的活动不一样,也没关系。它可以在整个过程中不断演变。即使是我们过去成功举办过的活动,第二次也会有所不同,第三次和第四次更是如此。我们总是在不断变化和适应。这是正常的,”Arvin补充到。 - -"I'm both a web developer and a community organizer and one of the things that I have come to learn, and I wish I had realized this earlier, was how hungry communities are for this kind of support," said Simmons. +**5) 整理文档,鼓励活动传播:** 例如,Salesforce整理了关于如何开展活动的指南和其他资料,以便小型团体可以自行举办活动。Salesforce还在考虑向更大的社区开源其中的一些文档。但活动组织者仍会随时提供建议,并在需要时提供其他帮助。 - +“我既是web开发者也是社区组织者,有一个我逐渐了解并后悔没能早一点知晓的事情,就是开源社区非常需要这类帮助,”Simmons说。 -"Communities may not even know that they need support from event planners and organizers. But when we show up and we offer our support, I think they quickly realize that events are just as complicated in software but in very different ways. Then they are eager to be here to work with us," said Simmons. +“社区可能根本不知道他们需要活动策划者和组织者的支持。但当我们出现并提供支持时,我想他们很快就会意识到,活动与软件一样复杂,但方式却截然不同。然后他们就会迫不及待地来与我们合作,”Simmons说。 - -**6) Blended events will be the new virtual:** Virtual events were forced to scale on the heels of a pandemic. But they are likely with us forever now, either in their pure state or as part of new, blended events. +**6) 混合活动将成为新的线上活动:** 线上活动因疫情而被迫规模增长。但它们可能会一直存在,无论是纯粹的线上活动,还是作为新的混合活动的一部分。 -One of the biggest advantages to virtual events is scale: organizers can reach much larger audiences located anywhere with an internet connection. That’s great because one of the biggest goals in open source is to grow communities and projects. +线上活动的最大优势之一是规模:组织者可以接触到更多的受众,他们可以在任何地方,只需要有互联网连接。这很好,因为开源的最大目标之一就是发展社区和项目。 -*"We need to get more people trained to be the next generation of developers. Frankly we're in need of more developers now. And it's not just developers, right? It's community leaders, it's program office managers, as every company is now going to open-source as the norm, we all know that there are a ton of things that go along with that. Legal and compliance and governance and all of these things,"* said Brown. +*“我们需要让更多的人接受培训,成为下一代开发者。坦率地说,我们现在需要更多的开发者。而且不仅仅是开发者,对吧?是社区领导者,是项目办公室经理,随着每家公司现在都将开源作为常态,我们都知道还有很多事情需要处理。法律、合规和治理等等,”* Brown说。 -Virtual events are a great growth facilitator. They also enable organizers to produce an event for less money and attendees to spend less money to attend. But that’s not to say that virtual events can out deliver physical events on every important touchstone. +线上活动是极好的增长促进器。它们还能让组织者花更少的钱举办活动,让参会者花更少的钱参加活动。但这并不意味着线上活动可以在每个重要方面都超过实体活动。 -*"When we look forward, now, we're seeing a strong opportunity for something hybrid. Where we can use the virtual side to bring something to a much larger group of people. That's going to provide a huge impact and benefit for attendees and hopefully help them through their careers and into the open-source community,"* Brown said. +*“展望未来,现在我们看到混合活动的巨大机遇。我们可以利用虚拟技术为更多的人提供服务。这将为参会者提供巨大的影响和利益,希望能帮助他们通过职业生涯并进入开源社区,”* Brown 说。 - -**So, what might a hybrid event look like?** +**那么,混合活动会是什么样的呢?** -*"We'll start with the virtual event and move over to our physical event, which is great, because we don't want our physical events to be an echo chamber. We've seen value come out of virtual and physical events, which is the silver lining of how we can use the virtual events to expand the region of the physical one in a hybrid model,"* said Brown. +*“我们将从线上活动开始,然后转向我们的线下活动,这是非常好的,因为我们不希望我们的线下活动成为只有一种声音的回音室。我们已经看到线上和线下活动带来的价值,这是我们在混合模式中利用线上活动来扩展线下活动范围的一线希望,”* Brown说。 - +归根结底,活动是有生命的东西,在岁月的长河中成长、消亡、适应和发展。技术在变、受众在变、环境在变、活动的需求在变、经济或流行病在变,很多事情都会影响和重塑开源活动的方式。因此,本文档也是一个有生命的东西。请定期回来查看更新。 -At the end of the day, events are living things, growing and dying, adapting and evolving through the years. Technologies change, audiences change, circumstances change, the needs of the event change, economics or pandemic changes, lots of things will always be shaping and reshaping how open source events are done. Accordingly, this document is also a living thing. Please check back regularly for updates. +## 致谢 -## Acknowledgements -**Contributors to this guide:** +**本指南的贡献者** * [Alyssa Arvin](https://www.linkedin.com/in/alyssaarvin/) * [Angela Brown](https://www.linkedin.com/in/angelabrown3/) diff --git a/content/zh-CN/guides/os-commercial-ecosystem.md b/content/zh-CN/guides/os-commercial-ecosystem.md index 2ee7a8f5..b14901af 100644 --- a/content/zh-CN/guides/os-commercial-ecosystem.md +++ b/content/zh-CN/guides/os-commercial-ecosystem.md @@ -1,178 +1,179 @@ --- -title: Creating an Open Source Commercial Ecosystem +title: 创建一个开源商业生态系统 --- -One way for an open source project to be successful is to have a thriving ecosystem of companies and products built around it. So what exactly is an open source commercial ecosystem and how can organizations help create and support sustainable open source projects? There are concrete ways to create confidence in a project’s long-term viability, encourage companies to create commercial products and services on top of open source projects, and re-invest in them with contributions, content, and other resources. These practices for enabling ecosystem development help set your projects up for success. +成功的开源项目通常围绕着一个繁荣的公司和产品生态系统构建。那么,什么是开源商业生态系统,以及如何帮助创建和支持可持续的开源项目呢?本书探讨了一些方法可以树立对项目长期可行性的信心,鼓励公司在开源项目的基础上构建商业产品和服务,并通过贡献、内容和其他资源重新投资于开源项目,从而促进整个生态系统的发展。 -**Table of Contents** +**目录** -* [Defining and creating a sustainable open source commercial ecosystem](#defining-and-creating-a-sustainable-open-source-commercial-ecosystem) -* [Ingredients of open source ecosystem success](#ingredients-of-open-source-ecosystem-success) - * [Building community/ growing contributions](#building-community-growing-contributions) - * [Instill confidence for commercial adoption](#instill-confidence-for-commercial-adoption) - * [Adherence to open source culture](#adherence-to-open-source-culture) -* [How to build an open source ecosystem](#how-to-build-an-open-source-ecosystem) - * [1. Establish a healthy governance system](#1-establish-a-healthy-governance-system) - * [2. Evaluate resources](#2-evaluate-resources) - * [3. Track progress and make adjustments](#3-track-progress-and-make-adjustments) -* [Example: Google Open Source Office](#example-google-open-source-office) - * [Acknowledgements](#acknowledgements) +* [定义和创建可持续的开源商业生态系统](#定义和创建可持续的开源商业生态系统) +* [开源生态系统成功的要素](#开源生态系统成功的要素) + * [建立社区/增加贡献](#建立社区增加贡献) + * [增强商业采用的信心](#增强商业采用的信心) + * [遵循开源文化](#遵循开源文化) +* [如何构建开源生态系统](#如何构建开源生态系统) + * [1. 建立健康的治理体系](#1-建立健康的治理体系) + * [2. 评估资源](#2-评估资源) + * [3. 跟踪进展并进行调整](#3-跟踪进展并进行调整) +* [示例:Google开源办公室](#示例google-开源办公室) + * [致谢](#致谢) -## Defining and creating a sustainable open source commercial ecosystem +## 定义和创建可持续的开源商业生态系统 -Open Source Program Offices can interact with open source in two different ways: +开源项目办公室(OSPO)可以通过两种不同的方式与开源社区互动: -* Outbound processes: contributing to existing or releasing new open source projects -* Inbound processes: consuming open source projects +* 出站:对现有开源项目做贡献,或发布新的开源项目 +* 入站:借鉴当前的一些开源项目 -A critical element of any business or product strategy that includes the use of open source software is the reinvestment of resources into the projects on which that strategy relies. This can lead to the creation of open source commercial ecosystems, which contribute to the viability and long-term sustainability for those projects. However, before a company will invest resources it must first have confidence in a project's future prospects such that they're willing to build commercial dependencies upon it. +任何包含使用开源软件的商业或产品策略都需要将资源重新投资到该策略所依赖的项目中。这可以促成开源商业生态系统的形成,为这些项目的可行性和长期可持续性做出贡献。然而,在公司投入资源之前,必须先对项目的未来前景有信心,愿意在其之上建立商业依赖关系。 -While there are no guarantees that an open source project will be successful, there are ways to set it up for success through practices that help build commercial ecosystems around it. If you can accelerate this process, it speeds innovation, products get to market faster, and projects see faster adoption and use. It becomes a virtuous cycle as [described by Accel Partners investor Ping Li](https://www.slideshare.net/AccelPartners/the-rise-of-open-adoption-software-oas). +虽然无法保证开源项目一定能成功,但可以通过一些做法来为其成功铺平道路,帮助其周围建立商业生态系统。如果能加快这个过程,就能加速创新,让产品上市更快,让项目被人更快的采用。正如 [Accel Partners 的投资者李平所描述的那样](https://www.slideshare.net/AccelPartners/the-rise-of-open-adoption-software-oas),这将形成一个良性循环。 -Li has identified three phases of sustainability to focus on Project, Product, and Profit. +李平确定了项目、产品和利润三个可持续性阶段。 -* **Project.** Creating a truly useful, purpose-driven project with a strong community, is step number one in creating a thriving ecosystem. This can be achieved by creating a great invention from the ground up, by forking an existing invention, or by repurposing an existing project. Did you know that the wildly popular OpenStack cloud platform was originally an in-house open source creation that NASA used? Likewise, the hugely popular Kubernetes orchestration tool evolved from an in-house open source project at Google. Creating, forking, and repurposing can all lead to strong demand for projects. +* **项目。** 创建一个真正有用、目标明确的项目并建立强大的社区是创建繁荣生态系统的第一步。可以通过从头开始创建一个伟大的发明、分叉一个现有的发明或重新利用一个现有项目来实现这一目标。你知道广受欢迎的 OpenStack 云平台最初是 NASA 内部使用的开源项目吗?同样,广受欢迎的 Kubernetes 编排工具是从 Google 的内部开源项目演变而来的。创建、分叉(Fork)重新利用都可以引起对项目的强烈需求。 -* **Product.** Only a few years ago, the open source arena included many purists who looked down on any talk of productizing and commercializing open source creations. That has changed, big time. Companies like Red Hat have built billion dollar businesses by complementing open source software with hardened support, and platforms like OpenStack have given birth to powerful companies like Mirantis. It has become a norm for many open source projects to be offered in one community edition that is complemented by a fully supported commercial edition. Think of this as going from project to product. +* **产品。** 就在几年前,开源领域包括许多纯粹主义者,他们对任何关于产品化和商业化开源创作的讨论都不屑一顾。现在情况已经发生了巨大的变化。像 Red Hat 这样的公司通过为开源软件提供强化支持建立了数十亿美元的业务,而像 OpenStack 这样的平台则催生了像 Mirantis 这样的强大公司。现在许多开源项目通常提供一个社区版,辅以全面支持的商业版。可以将这看作是从项目到产品的转变。 -* **Profit.** Profit is the brass ring for businesses everywhere, and an open source creation can complete the virtuous cycle of sustainability by advancing from Project to Product to Profit. Building a profit model for an open source invention can require creativity. Does the most profitable path lie in providing mission-critical support, as Red Hat does for its Enterprise Linux and many other open source offerings? Does it lie in seeking licensing fees or profit models based on working with hardware manufacturers, as seen in the Android ecosystem? Can an acquisition provide a profitable business model for an invention? Other profit models for open source are built around charging fees for services but not software, donation-based funding, and crowdsourced donations. +* **利润。** 利润是各个公司追求的目标,而开源创作可以通过从项目到产品再到利润的良性循环来实现可持续发展。为开源发明建立利润模型可能需要创造力。像 Red Hat 为其企业 Linux 和许多其他开源产品提供的关键支持一样,最有利可图的路径是提供关键任务支持吗?像 Android 生态系统中的与硬件制造商合作的许可费或利润模型呢?比如可以对服务收费,而不对软件本身收费,可以接受捐赠的资金、众筹捐款等实现开源利润。 -Once an open source creation has progressed through the three phases above, the virtuous cycle, driven by commercial dependency and reinvestment, is completed. At this point, the project has reached a steady-state of robust community development, bug fixes, and security updates are optimized through the many eyeballs on a project, lucrative partnerships can be formed, and much more. +一旦开源创作通过上述三个阶段取得了进展,商业依赖和重新投资推动的良性循环就完成了。此时,项目已经达到了稳定的社区开发状态,有众多开发者参与其中,有人来修复 bug 并进行安全更新,这就可以形成有利可图的合作伙伴关系等等。 -Commercial dependency results in users, users buy solutions that generate profit, and profits increase resources to invest back in the community. A healthy community can also encourage partnerships and cross-pollination between projects that improve quality. +商业依赖导致用户的增加,用户购买解决方案产生利润,利润增加了投资社区的资源。健康的社区还可以促进项目之间的合作和交流,从而提高质量。 -## Ingredients of open source ecosystem success +## 开源生态系统成功的要素 -Creating unique code that solves a problem is job number one in pursuing the optimal ecosystem for an open source creation. For example, OpenStack has helped countless organizations centralize resources in the cloud, resulting in cost reductions for in-house storage and compute resources. Likewise, Network Function Virtualization (NFV) technology is helping telecommunications companies reduce their reliance on costly proprietary components in their technology stacks. +在追求开源创作的最佳生态系统中,首要任务是创建解决问题的独特代码。例如,OpenStack 帮助了无数组织将资源集中在云中,从而降低了内部存储和计算资源的成本。同样,网络功能虚拟化(NFV)技术帮助电信公司减少了对昂贵专有组件的依赖。 -Once the problem-solving creation exists, focus can be placed on building community and contributions, instilling confidence for commercial adoption, and adherence to open source culture. +一旦解决问题的创作存在,就可以专注于建立社区和贡献、增强商业采用的信心和遵循开源文化。 -### Building community/ growing contributions +### 建立社区/增加贡献 -To build a healthy community around an open source project, developer training and recruitment are key, as are [defining guidelines for inbound contributions](https://opensource.guide/how-to-contribute/), and disciplined development practices such as version management, build and test automation, documentation, on-ramps for contribution, and tracking issues and revisions. +要在开源项目周围建立一个健康的社区,关键是开发人员培训和招募,以及[定义入站贡献的指南](https://opensource.guide/how-to-contribute/)和纪律性的开发实践,如版本管理、构建和测试自动化、文档、贡献的入口和问题和修订的跟踪。 -> You need to give people ways to get involved with your projects that don't require them to have a Ph.D. or to have been working in a similar area for 25 years. You need ways for them to get involved quickly. That means that you need really good setup documentation, and it also means having active and healthy forums and responsive maintainers. -> – Ian Varley, Software Architect, SalesForce. +> 你需要为人们提供参与你的项目的方式,而这些方式不需要他们拥有博士学位或在类似领域工作了 25 年。你需要为他们提供快速参与的方式。这意味着你需要真正好的设置文档,还意味着你需要有活跃和健康的论坛和负责任的维护者。 +> – Ian Varley, Salesforce 软件架构师 -The [Contributor Covenant](http://contributor-covenant.org/) is a rock solid code of conduct and contributor guidelines document that is used by [over 40,000 open source projects](http://contributor-covenant.org/adopters/), including Kubernetes, Rails, and Swift. Likewise, organizations such as TODO Group at The Linux Foundation have extensive experience with setting inbound contribution guidelines. +[Contributor Covenant](http://contributor-covenant.org/)是一个可靠的行为准则和贡献者指南文件,被包括 Kubernetes、Rails 和 Swift 在内的 [40000 多个开源项目](http://contributor-covenant.org/adopters/)使用。同样,像 Linux 基金会的 TODO Group 这样的组织在设置入站贡献指南方面有丰富的经验。 -Cloud Foundry’s [Code of Conduct](https://www.cloudfoundry.org/code-of-conduct/) provides a strong example of how you can set out official guidelines for community members to follow. It specifies how community members can report incidents, what constitutes unacceptable behavior, and much more. +Cloud Foundry 的[行为准则](https://www.cloudfoundry.org/code-of-conduct/)提供了一个很好的例子,展示了如何为社区成员制定官方准则。它详细说明了社区成员如何报告事件,什么行为算是不可接受的,等等。 -### Instill confidence for commercial adoption +### 增强商业采用的信心 -As an open source software project grows, [a study shows](http://www.ifosslr.org/ifosslr/article/view/64) it reaches an inflection point at which corporations want to participate, but aren’t necessarily comfortable with the intellectual property regime (or lack thereof) in the open source project. These practices help instill confidence in companies that may be hanging out on the fringes, waiting to commit to the project. +随着一个开源软件项目的发展,[一项研究显示](http://www.ifosslr.org/ifosslr/article/view/64),它会达到一个拐点,此时企业希望参与进来,但对于该开源项目的知识产权制度(或缺乏制度)可能不太放心。以下做法有助于增强那些可能在边缘徘徊、等待承诺的公司的信心。 -* **IP and trademark management.** Open source licenses and policies, along with trademarks, can have a huge impact on whether a project achieves commercial adoption. There are many [free resources](https://www.linux.com/news/free-tools-driving-open-source-project-success) available for managing these. +* **知识产权和商标管理。** 开源许可证和政策以及商标可以对一个项目是否实现商业采用产生巨大影响。有许多[免费资源](https://www.linux.com/news/free-tools-driving-open-source-project-success)可用于管理这些。 -* **Independent governance.** For projects at a certain stage of growth, it becomes critically important to establish independent governance and neutral project assets. Remember that it is critical to involve people who are qualified to supply business and legal governance of projects as well as people who can supply technical governance. For example, a person with technical skills may have an understanding of Inbound Contribution Guidelines, while a person with business credentials might be qualified to set policies regarding trademarks. +* **独立治理。** 对于某个成长阶段的项目来说,建立独立治理和中立的项目资产变得至关重要。请记住,至关重要的是将能够提供项目商业和法律治理的合格人员纳入进来,以及能够提供技术治理的人员。例如,具有技术技能的人可能对入站贡献指南有一定的了解,而具有商业资质的人可能有资格制定商标方面的政策。 - > “In fostering a healthy commercial ecosystem, have a clear vision of how your project is governed, specifying what is and isn't a part of the particular project. Have a clear set of interfaces functioning as places where your commercial ecosystem can plug in, or attach to the project. As you start developing an ecosystem, you want companies to feel safe in the work that they are doing with you. - > – Sarah Novotny, FOSS strategy Azure + > “在促进健康的商业生态系统时,要对项目的治理有一个清晰的愿景,明确哪些是项目的组成部分哪些不是。要有一套明确的接口,作为商业生态系统可以连接或附着到项目的地方。在开始开发生态系统时,你希望公司在与你合作时感到安全。” + > – Sarah Novotny, Azure FOSS 战略部 -* **Supported, secure, and reliable code and infrastructure.** How much benefit has Red Hat derived from offering hardened support for open source software? A huge amount. In addition to auditing your code for reliability and security, focus on offering support and leverage community support options such as forums. Many firms, such as Black Duck, also offer open source security and reliability audits. +* **支持、安全和可靠的代码和基础设施。** Red Hat 因为为开源软件提供强化支持而获得了多少好处?非常多。除了审核代码以确保可靠性和安全性之外,还要提供支持,并利用社区论坛等资源。像 Black Duck 等许多公司还提供开源安全性和可靠性审计服务。 -* PR and marketing support. Does your project have a blog and is there a plan surrounding it for marketing and public relations? Creating your own content around your project and complementing that effort with presentations at open source events as well as outreach to the media along with marketing can get your project talked about, and adopted. Many commercial open source projects experience conversion ratios (as measured by the percentage of downloaders who buy something) that are not high when compared to proprietary software products, so low-cost and very scalable marketing functions are key to profitability. +* **公关和营销支持。** 你的项目是否有博客?是否有营销和公关计划?围绕项目创建自己的内容,并通过在开源活动中进行演讲以及与媒体和市场营销的联系来补充这一努力,可以让你的项目被人们所讨论和采用。与专有软件产品相比,许多商业开源项目的转化率(通过下载者中购买某些东西的百分比)并不高,因此低成本且可扩展的营销功能对盈利至关重要。 -* Create strong customer feedback loops. Ask successful business people how they view customers and they will say that the customer comes first. That’s a business tenet that may or may not be emphasized in a technical culture. Ensure that you offer direct ways to get customer feedback and encourage it. Forums can provide rich customer feedback. Answer customers across every channel you can, ranging from forums to telephone support. +* **创建强大的客户反馈循环。** 问问成功的商业人士他们如何看待客户,他们会说客户至上。这是一个商业原则,在技术文化中可能并不强调。确保提供直接的客户反馈途径并鼓励反馈。论坛可以提供丰富的客户反馈。回答来自各个渠道的客户问题,包括论坛以及电话支持等。 -### Adherence to open source culture +### 遵循开源文化 -A downstream project with no ecosystem and community is not really leveraging the value of open source. An adherence to an open source culture is needed to succeed. +一个没有生态系统和社区的下游项目实际上没有充分利用开源的价值。遵循开源文化是成功的关键。 - > One of the most important things when building an open source community is making sure that your own processes are open. The more transparent you can make your decision-making processes, the more of a sense of ownership your community will have. You also want to make sure that your process doesn't become a blocker. If your open source process for either inbound or outbound contributions is onerous, people will look to bypass the process or simply decide that contributing is too difficult. - > – Luke Faraone, Software Engineer, Dropbox +> 在构建开源社区时最重要的一点是确保你自己的流程是开放的。你的决策过程越透明,你的社区就会越有归属感。你还需要确保你的流程不会成为一个阻碍因素。如果你的开源流程无论是入站还是出站的贡献都过于繁琐,人们会尝试绕过这个流程,或者干脆认为贡献太困难。 +> – Luke Faraone, Dropbox 软件工程师 -* **Balance control and openness.** Open source software is widely preferred by many users over proprietary offerings simply because proprietary software has traditionally carried with it costs and controls. In creating a commercial strategy surrounding an open source project, you must balance the value of controlling certain aspects of your offering (for example, how much support comes with it), with openness (such as whether you offer a free community edition that can serve as an on-ramp to a commercial edition). Also, keep in mind that project founders can exert much less control over their project over time than they did at the start. +* **平衡控制和开放性。** 许多用户更喜欢开源软件而不是专有软件,仅仅是因为专有软件通常带有成本和控制。在围绕开源项目创建商业战略时,您必须平衡控制产品某些方面(例如,支持的程度),与开放性(例如是否提供免费的社区版,可以作为商业版的入口)。此外,请记住,项目创始人在项目的控制方面随着时间的推移往往比起初时要少。 - > As open source projects grow, you need to find a way to actually have a circle of trust that lets you delegate to other people, trusting them to make decisions. That ends up being a difficult transition. At first, you have a small project where the founders understand everything that's going on and have, to some degree, total control. Then, the project becomes community-driven and there's no single person or group that has total control. - > – Joe Beda, Co-Founder of Kubernetes, Co-Founder and CTO of Heptio + > 随着开源项目的发展,你需要找到一种方式来建立一个信任的圈子,让你能够委托给其他人,相信他们能够做出决策。这个转变是困难的。一开始,你有一个小项目,创始人对项目的所有事情都了如指掌,并且在某种程度上拥有完全的控制权。然后,项目变成了社区驱动,没有一个单一的人或团队拥有完全的控制权。 + > – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官 -* **Transparency.** The concept of transparency has long been central to open source culture. After all, doesn’t being able to dive directly into a code repository require openness and transparency? However, transparency is not necessarily a central tenet for most businesses. In fact, some businesses go to great lengths to keep internal information and assets strictly internal. Evaluate the benefits of transparency as you craft a strategy for commercial success based on open source. Many people will appreciate business-focused transparency just as they appreciate code transparency. +* **透明度。** 透明度的概念长期以来一直是开源文化的核心。毕竟,直接进入代码仓库不需要开放和透明吗?然而,透明度对于大多数企业来说并不是一个核心原则。事实上,有些企业竭尽全力将内部信息和资产严格保密。在制定基于开源的商业成功策略时,评估透明度的好处。许多人会欣赏以商业为导向的透明度,就像他们欣赏代码的透明度一样。 - > There are open source projects where external contributions are welcome, but the road maps and the governance of the projects are very much in the hands of a single company. Then there is truly community-driven open source. Which kind of projects are you working with? - > – Joe Beda, Co-Founder Kubernetes, Co-Founder and CTO, Heptio + > 有些开源项目欢迎外部贡献,但项目的路线图和治理在很大程度上掌握在一家公司手中。然后还有真正以社区驱动的开源项目。你正在与哪种类型的项目合作? + > – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官 -* **Foundations.** Foundations have had an enormous impact on the world of open source in recent years. Your organization can benefit from working with foundations ranging from The Linux Foundation to the Apache Software Foundation, and you may benefit from launching an open source-focused foundation. Understanding the role of open source foundations in fostering sustainable open source projects, and considering when and how to involve them, will help set you up for success. +* **基金会。** 近年来,基金会对开源世界产生了巨大影响。你的组织可以通过与从 Linux 基金会到 Apache 软件基金会等基金会合作,受益于基金会的工作,并可能受益于成立一个专注于开源的基金会。了解开源基金会在促进可持续开源项目方面的作用,以及何时以及如何参与其中,将有助于为成功打下基础。 - > Foundations provide a lot of value. Without them it has historically been hard for a lot of very critical projects to get the funding they need to be well maintained. They help ensure a level playing field and they provide mechanisms for organizations to give back to open source projects without contributing developers directly. - > — Luke Faraone, Software Engineer, Dropbox + > 基金会提供了很多价值。没有它们,很多非常重要的项目很难获得它们需要的资金以进行良好的维护。它们有助于确保公平竞争,并为组织提供了向开源项目回馈而不是直接贡献开发者的机制。 + > — Luke Faraone, Dropbox 软件工程师 -## How to build an open source ecosystem +## 如何构建开源生态系统 -To build out open source ecosystems around your projects, you must focus on the following: governance; resources needed to use an OS project as a commercial dependency; tracking progress and making adjustments. Let’s look into each of these and the value they can bring to your commercial ecosystem strategy. +要围绕你的项目构建开源生态系统,你必须关注以下几点:治理;将开源项目作为商业依赖所需的资源;跟踪进展并进行调整。让我们分别看看这些内容和它们对你的商业生态系统战略所带来的价值。 -### 1. Establish a healthy governance system +### 1. 建立健康的治理体系 -It is essential to create a neutral structure that makes it easy for competitors to participate, and you should also consider whether external stakeholders should participate in the governance process. Your ecosystem is at its healthiest when governance is independent and receiving diverse contributions. +创建一个中立的结构,使竞争对手易于参与,并考虑是否应该让外部利益相关者参与治理过程,这是至关重要的。当治理是独立的并接受多样化的贡献时,你的生态系统才能最健康。 -If you oversee the technical governance of your project, you may be far less qualified to make decisions regarding support, trademarking, or licensing. Likewise, you must separate technical and financial decision-making. Some of the best technical advancements take place in environments where moonshots are encouraged. Encourage technical contributors to aim for moonshots, and separate decision-makers can evaluate whether they are financially feasible. +如果你负责项目的技术治理,那么在支持、商标管理或许可方面做决策时,你的资质很可能较低。同样,你必须分开技术决策和财务决策。一些最好的技术进展发生在鼓励大胆尝试的环境中。鼓励技术贡献者追求大胆的目标,而独立的决策者可以评估它们是否在财务上可行。 -> One of the things that we've tried to engender in the Kubernetes community is the idea of a project over people or company. What's good for the project is a separate question from what's good for the companies that are involved with the project. When you end up with open source projects that are too tightly tied to a single company, really sticky issues can arise. -> – Joe Beda, Co-Founder of Kubernetes, and Co-Founder and CTO of Heptio +> 我们在 Kubernetes 社区中尝试培养的一个最重要的思想是,项目优先于人或公司。对于项目来说什么是好的与参与项目的公司的利益无关。当你的开源项目与单一公司过于紧密地联系在一起时,可能会出现非常棘手的问题。 +> – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官 -### 2. Evaluate resources +### 2. 评估资源 -When partners or customers are deciding whether to utilize open source projects in their businesses, there are certain different resources they might evaluate or consider: +当合作伙伴或客户决定是否在他们的业务中使用开源项目时,他们可能会评估或考虑以下不同的资源: -* **Security policies:** Vulnerability management is a key concern customers or partners may have. You will need to ensure you have all the necessary infrastructure and a policy on [how to respond when vulnerabilities are found across both any commercial version or open source product](https://opensource.googleblog.com/2021/02/a-new-resource-for-coordinated-vulnerability-disclosure-in-open-source-projects.html). Open source cannot be second on security to paid customers, it is not a way to differentiate your commercial offering. +* **安全策略:** 漏洞管理是客户或合作伙伴可能关注的一个关键问题。你需要确保具备所有必要的基础设施和一个政策,以[应对商业版或开源产品中发现的漏洞](https://opensource.googleblog.com/2021/02/a-new-resource-for-coordinated-vulnerability-disclosure-in-open-source-projects.html)。开源不能在安全性上低于付费客户,这不能成为区分你的商业产品的方式。 -* **Legal policies:** The costs for legal resources pertaining to open source projects can be high, but it is also worth keeping in mind that free legal resources exist. The Software Freedom Law Center (SFLC) has a set of very good online resources on how open source licenses and copyrights work, and much more. The SFLC authors are attorneys who were part of creating popular open source licenses and more. Don’t make the mistake of assuming that a free edition of a project needs no legal protections or forethought regarding licensing. +* **法律政策:** 与开源项目相关的法律资源的成本可能很高,但也要记住存在免费的法律资源。软件自由法律中心(SFLC)提供了一系列关于开源许可证和版权的很好的在线资源,还有更多。SFLC 的作者是创建流行的开源许可证等的律师。不要错误地认为免费版项目不需要法律保护或关于许可方面的预先考虑。 -* **Community management:** The community is often the strongest asset a successful open source project can have, and investing resources in growing a healthy community is a best practice. Often, an enthusiastic community grows from a beloved, free edition of a project, and therefore it is a mistake to invest only in community growth for a commercial edition. +* **社区管理:** 社区往往是一个成功的开源项目最强大的资产,投入资源来建设一个健康的社区是一个最佳实践。通常,一个充满热情的社区从一个受人喜爱的免费社区版项目中发展而来,因此,仅仅为商业版投资社区增长是一个错误的策略。 -> Look at how your community is interacting with itself, how new leadership is being grown and mentored, and how any pain points are evolving. As an example, Kubernetes right now has a pain point of very long review times on pull requests, so we're getting started building out a mentoring program to help mentor new reviewers. Through the mentoring program, we'll be able to track measurements and ideally see a decrease in the amount of time the review process takes. -> – Sarah Novotny, FOSS strategy at Azure +> 看看你的社区是如何互动的,新的领导者是如何成长和指导的,痛点是如何演变的。例如,Kubernetes 目前的一个痛点是拉取请求的审核时间非常长,所以我们开始建立一个指导计划来帮助指导新的审阅者。通过指导计划,我们将能够跟踪测量,并希望看到审查过程所需的时间减少。 +> – Sarah Novotny, Azure FOSS 战略部 -* **Access to test infrastructure/environments:** Some open source applications require dedicated servers, specialist tools, automated quality control and/or security hardening. Dedicating resources to a paid and supported edition while starving resources for a free, community edition is a poor strategy, because free community editions often facilitate the first steps that potential customers will take. Ensure open source versions and any open source developers have access to the same tools, checks and automation that your staff developers or paid versions are run on. Parity across different versions and collaborators is key. +* **访问测试基础设施/环境:** 一些开源应用程序需要专用服务器、专业工具、自动化质量控制和/或安全加固。在资源被用于付费和支持版本的同时剥夺免费的社区版本的资源是一个糟糕的策略,因为免费的社区版本通常为潜在客户的第一步提供了机会。确保开源版本和任何开源开发人员都可以访问与你的员工开发人员或付费版本运行的相同工具、检查和自动化。不同版本和合作者之间的平等是关键。 -* **Invest wisely in education:** open source education is critical to know where and how to interact with the open source ecosystem in a healthy way. +* **明智投资教育:** 对于健康的方式了解在开源生态系统中何时何地以及如何与之互动,开源教育至关重要。 - * Training – Education and training offerings serve a virtuous cycle, where trained users advance the cause of your open source inventions. + * 培训 - 教育和培训提供了一个良性循环,受过培训的用户推动了你的开源创作的进展。 - * Certifications – Certification programs help users advertise their skillsets surrounding your inventions and boost their market value and your market value. Remember that you don’t just have to certify people with skillsets, either. Consider The Linux Foundation’s Core Infrastructure Initiative (CII) Badge Program. It includes a Best Practices Badge that can showcase an open source project's commitment to security, fostering trust. + * 认证 - 认证计划帮助用户宣传他们在你的创作周围的技能,并提高他们的市场价值和你的市场价值。记住,你不仅可以认证具有技能的人。考虑一下 Linux 基金会的核心基础设施倡议(CII)徽章计划。其中包括一个最佳实践徽章,可以展示一个开源项目对安全性的承诺,建立信任。 - * Mentorships and internships – Through mentorships and internships, you can foster a wider knowledge base surrounding your open source offerings, and you can create opportunities. + * 导师制和实习计划 - 通过导师制和实习计划,你可以培养与你的开源产品相关的更广泛的知识库,并创造机会。 - * Hold events – An open source project has a great chance of growing its successful ecosystem if the whole community around it takes an active role. Events are fantastic ways to foster group participation. + * 举办活动 - 如果整个社区都积极参与,那么一个开源项目在成功生态系统中增长的机会就很大。活动是促进群体参与的绝佳方式。 -* **Give back:** There are substantial benefits to participating in the projects you use in your products and contributing upstream. If an open source project has made a positive difference for you and your organization, you can likely make a positive difference for it by contributing. This kind of give-and-take is an established practice throughout the open source arena. Just look at Red Hat and IBM, both of which are top contributors to Linux. +* **回馈:** 参与你在产品中使用的项目并向上游贡献的好处是巨大的。如果一个开源项目对你和你的组织产生了积极影响,你可能也可以通过贡献对其产生积极影响。这种给予和接受是开源领域的一种实践。只需看看 Red Hat 和 IBM,它们都是 Linux 的主要贡献者。 -### 3. Track progress and make adjustments +### 3. 跟踪进展并进行调整 -Of course, your effort to create a healthy, commercial ecosystem around open source is a moving target. You must keep the people overseeing your governance structure involved, and keep your community providing feedback. “Listen, measure and adjust,” is good advice on this front. The members of your community can provide extraordinarily good feedback on how to make needed improvements and reach more people. Remember that each community is different. +当然,你在开源周围建立一个健康的商业生态系统的努力是一个不断变化的目标。你必须让负责治理结构的人参与进来,并让你的社区提供反馈。 +“倾听、衡量和调整”是在这方面的一个很好的建议。你的社区成员可以就如何进行必要的改进和吸引更多人提供非常好的反馈。请记住,每个社区都是不同的。 -> Find metrics for each community that you're working with. I tend to find metrics based on what a specific community is feeling as pain, and try to change those metrics for the better. There is no one magic assessment where if you look at six metrics, ranging from pull requests to contributor numbers, you can suddenly pronounce your community and ecosystem healthy. You could have a very small project that is extraordinarily healthy because it has half a dozen core contributors and a dozen people who are active but not maintainers. There might be healthy discussions, and pull requests might be handled in a speedy manner, and that might be an incredibly healthy community even though it's not going to have a million stars or forks on GitHub. -> – Sarah Novotny, Open Source Wonk, Azure Office of the CTO +> 为你与之合作的每个社区找到适当的度量标准。我倾向于根据特定社区的痛点找到一些度量标准,并努力改变这些度量标准以取得更好的效果。没有一个神奇的评估方法,如果你查看六个度量标准,从拉取请求到贡献者数量,你会突然宣布你的社区和生态系统是健康的。你可能有一个非常小的项目,但它非常健康,因为它有六个核心贡献者和十几个活跃但不是维护者的人。可能有很好的讨论,并且拉取请求可能会迅速处理,这可能是一个非常健康的社区,即使它在GitHub上没有一百万个星星或分支。 +> – Sarah Novotny, Azure CTO 办公室的开源专家 -## Example: Google Open Source Office +## 示例:Google 开源办公室 -Many companies have built out successful open source program offices. The trend started in the technology industry as big players like IBM and Oracle realized that open source was seriously influencing the software ecosystem, but now companies of all stripes run open source programs. For example, Walmart Labs and Netflix have flourishing,[highly structured open source programs](https://www.linux.com/blog/learn/chapter/open-source-management/2017/5/enterprise-open-source-programs-concept-reality) and regularly contribute projects to the community. Open source programs are ubiquitous because open source is ubiquitous. In fact, according to the [Future of Open Source Survey](https://www.blackducksoftware.com/2016-future-of-open-source) from Black Duck and North Bridge, a mere three percent of respondents, most of them from enterprises, said they don't use any open source tools or platforms. +许多公司已经建立了成功的开源项目办公室。这种趋势始于技术行业,因为 IBM 和 Oracle 等大公司意识到开源严重影响了软件生态系统,但现在,各行各业的公司都在运行开源项目。例如,Walmart Labs 和 Netflix 拥有蓬勃发展、[高度结构化的开源计划](https://www.linux.com/blog/learn/chapter/open-source-management/2017/5/enterprise-open-source-programs-concept-reality),并定期向社区贡献项目。开源项目办公室无处不在,因为开源无处不在。事实上,根据 Black Duck 和 North Bridge 的 [Future of Open Source Survey](https://www.blackducksoftware.com/2016-future-of-open-source),仅有三个百分点的受访者(其中大多数来自企业)表示他们不使用任何开源工具或平台。 -Among open source programs, Google’s is perhaps the most widely imitated of all. Google releases a lot of open source contributions, and company leaders are very frank about saying that the company gets business benefits from the ensuing community participation. Just witness the momentum that Android and Kubernetes have gained through community development and contributions. [In a story on open source programs](https://opensource.com/business/16/9/google-open-source-program-office), John Mark Walker, the Director of Capital One's Open Source Program Office, noted the following: +在开源项目中,Google 的开源项目办公室也许是最被广泛模仿的。Google 发布了大量的开源贡献,并且公司领导人非常坦率地表示,公司从随之而来的社区参与中获得了商业利益。只需看看 Android 和 Kubernetes 通过社区开发和贡献获得的势头。[在一篇关于开源计划的文章中](https://opensource.com/business/16/9/google-open-source-program-office),Capital One 的开源项目办公室主任 John Mark Walker 指出: -> Technology vendors have no choice—collaborate or die. They can willfully disregard trends as long as they want, but ultimately it's to their detriment. They would do well to borrow a few pages from Google and other [TODO Group](http://todogroup.org) participants and take a holistic approach to open source ecosystems: Which ones are of strategic importance, and how can participation help go to market more quickly with new products and services? And for an extra dash of magic, Google has shown that embracing a mission outside of a company's primary product focus yields results as well. +> 技术供应商别无选择——合作还是退出。他们可以自愿忽视趋势,但最终会对他们不利。他们最好从 Google 和其他 [TODO Group](http://todogroup.org) 的参与者那里借鉴一些方法,以及采取一种全面的开源生态系统方法:哪些项目具有战略重要性,参与如何帮助更快地推出新产品和服务?而且对于额外的魔力,Google 还显示出接受公司主要产品关注之外的使命也会产生结果。 -That couldn’t be more true, and this advice extends beyond just technology vendors. All companies could learn valuable lessons from Google’s open source program. Recently, Google [launched a new home](https://opensource.google.com) for its open source projects, processes, and initiatives. The site runs deep and has several avenues that are worth observing for anyone who wants to create a commercial ecosystem around open source. +这一点再真实不过了,这些建议不仅适用于技术供应商,所有公司都可以从 Google 的开源项目中学到宝贵的经验。最近,Google 为其开源项目、流程和倡议[推出了一个新的主页](https://opensource.google.com)。这个网站非常详尽,并提供了几个途径,对于任何想在开源项目周围创建商业生态系统的人来说都值得关注。 -The Google site features a directory of open source projects and a Community section that provides a good look at how training, events, and other efforts can harness energy from an open source community. However, the real crown jewel if you want to create a commercial ecosystem around open source projects is a section called [Docs](https://opensource.google.com/docs/), which is billed as “our internal documentation for how we do open source at Google." From open source contributors and developers to companies implementing open source programs, this section of Google’s site has a motherlode of tested and hardened information. There are three primary sections of Docs: +Google 的网站提供了一个开源项目目录和一个社区部分,很好地展示了培训、活动和其他努力如何从开源社区中获得能量。然而,如果你想围绕开源项目创建一个商业生态系统,最重要的是[写好文档](https://opensource.google.com/docs/),这被称为“我们在 Google 内部如何处理开源事项的文档”。从开源贡献者和开发人员到实施开源项目的公司,Google 网站上有一大堆经过测试和验证的文档。文档要包含三个部分: -* Creating covers how Google developers release code that they've written, either in the form of a new project or as a patch to an external project. -* Using explains how Google brings open source code into the company and uses it. It delves into maintaining license compliance, and more. -* Growing describes some of the programs Google runs inside and outside the company to support open source communities. +* 创建部分介绍了 Googl e开发人员如何发布他们编写的代码,无论是以新项目的形式还是作为对外部项目的补丁。 +* 使用部分解释了 Google 如何将开源代码引入公司并使用它。它深入探讨了维护许可合规性等内容。 +* 成长部分描述了 Google 在公司内外运行的一些支持开源社区的计划。 -According to Will Norris, former software engineer at Google's Open Source Programs Office: "These docs explain [the process we followed for releasing](https://opensource.google.com/docs/releasing/) new open-source projects, [submitting patches](https://opensource.google.com/docs/patching/) to others' projects, and [how we manage the open-source code that we bring into the company](https://opensource.google.com/docs/thirdparty/) and use ourselves. But in addition to the how, it outlines [why we do things the way we do, such as why we only use code under certain licenses](https://opensource.google.com/docs/using/license/) or why [we require contributor license agreements](https://opensource.google.com/docs/cla/policy/) for all patches we receive." +根据 Google 开源项目办公室的前软件工程师 Will Norris 的说法:“这些文档解释了[我们发布新的开源项目的过程](https://opensource.google.com/docs/releasing/),[提交补丁](https://opensource.google.com/docs/patching/)给其他项目的过程,以及[我们如何管理引入公司内部的开源代码](https://opensource.google.com/docs/thirdparty/)。除了如何做的过程,它还概述了[为什么要以这种方式做事,比如为什么我们只使用特定许可证的代码](https://opensource.google.com/docs/using/license/),或者[为什么我们要求所有收到的补丁都需要贡献者许可协议](https://opensource.google.com/docs/cla/policy/)。” -> Google has released excellent open source process documentation, essentially laying out their internal policies and procedures. Their description of their internal ownership model is definitely instructive. I also highly recommend Karl Fogel's Producing Open-Source Software book, available online under a Creative Commons license. -> – Luke Faraone, Software Engineer, Dropbox +> Google 发布了优秀的开源流程文档,实际上是在阐述他们的内部政策和程序。他们关于内部所有权模型的描述绝对是有指导意义的。我也非常推荐在网上以 Creative Commons 许可证发布的 Karl Fogel 编写的《Producing Open-Source Software》一书。 +> – Luke Faraone, Dropbox 软件工程师 -A close look at how Google’s Open Source Programs Office works show that the company places substantial emphasis on community diversity and diverse programs that advance its open source communities. The concept of community is very much worth focusing on as you seek to build a healthy commercial ecosystem around open source. +深入了解 Google 的开源项目办公室的工作方式表明,该公司非常注重社区多样性和推进其开源社区的各种多样化计划。关注社区的概念在你努力构建一个围绕开源的健康商业生态系统时是非常值得关注的。 -> An open source project has the best chance of growing into a successful ecosystem if the entire community around it takes an active role. This includes everyone from code committers, users, documentation writers, software vendors, platform vendors, and integrators. -> – Abby Kearns, Chief Technology Officer at Puppet +> 一个开源项目只有整个社区都积极参与,它才有最好的机会变成一个成功的生态系统。这包括代码提交者、用户、文档编写者、软件供应商、平台供应商和集成商等每个人。 +> – Abby Kearns, Puppet 首席技术官 -### Acknowledgements +### 致谢 -Contributors to this guide: +感谢本书的各位贡献者: * Craig Northway * Ana Jimenez diff --git a/content/zh-CN/guides/ospo-simple-faq.md b/content/zh-CN/guides/ospo-simple-faq.md index dee7e7ba..19c7ca43 100644 --- a/content/zh-CN/guides/ospo-simple-faq.md +++ b/content/zh-CN/guides/ospo-simple-faq.md @@ -1,25 +1,23 @@ --- -title: Open Source Program Office (OSPO) Easy FAQ +title: 开源项目办公室(OSPO)简单的常见问题解答 --- -The OSPO Easy FAQ (Work in Progress) addresses key aspects of establishing and running an Open Source Program Office (OSPO), clarifying fundamental concepts and offering practical insights. -This FAQ aims to be a go-to resource for navigating the world of open source and building a framework for compliance, strategy, governance, and community within companies. +易懂的开源办公室常见问题解答(进展中)解决构建和运行开源项目办公室(Open Source Program Office,OSPO)中的关键方面,澄清基础概念和提供实用见解。本常见问题解答旨在成为帮助您遨游开源世界并为公司合规、战略、治理和社区构建框架的资源指南。 -Please note this aims to be a living document that will be regularly updated to reflect the ongoing progress of the OSPO Simple FAQ -## 💚 About OSPO FAQ work and contributors +请注意,本指南旨在成为一份动态更新的文档,将根据简易版开源项目办公室常见问题解答的持续进展进行定期更新。 -![source: ospo easy faq cover](/img/guides/easy-faq-ospo.png) +## 💚 关于开源项目办公室的常见问题解答工作和贡献者 -The OSPO Easy FAQ is still a work in progress. The efforts are being made by members from the Japan OSPO Local Meetup in Japanese, with the support of [OpenChain](https://www.openchainproject.org/) Japan WG -and the TODO Group. The original version is being documented in Japanese as part of the bi-weekly OSPO Japan Local Meetups, and the activity is facilitated by Kiyoshi Owada. +![source: ospo easy faq cover](/static/img/guides/easy-faq-ospo.png) -* To participate in the meetings, people can [join the online community platform](https://community.linuxfoundation.org/events/details/lfhq-ospo-local-meetup-japan-japanese-speaking-presents-9th-japan-ospo-local-meetup-supported-by-todo-group-and-openchain-japan-wg/) -* Daily conversations happen via [TODO Group's slack channel](https://join.slack.com/t/thetodogroup/shared_invite/zt-169ok18cz-Pi6tpVHTeW9254d1FpkLew) `#chapter-japan` +关于开源项目办公室简易的常见问题解答目前仍在进展中。该项目由日本开源项目办公室当地见面会成员使用日语编写,并得到了 [OpenChain](https://www.openchainproject.org/) 日本工作组和 TODO Group 的支持。原始版本以日语的形式在每两周一次的日本开源项目办公室成员的当地见面会上进行记录,此活动由小和田喜代志先生主持。 -## 📝 Documentation -* [Download OSPO Easy FAQ in Japanese (Work in Progress)](https://github.com/todogroup/todogroup.org/files/11635143/OSPO_SimpleQA.pdf) -* [Download OSPO Easy FAQ in English (Work in Progress)](https://github.com/todogroup/todogroup.org/files/11635329/OSPO_SimpleQA_en.pdf) +* 参加会议,人们可以[加入在线社区平台](https://community.linuxfoundation.org/events/details/lfhq-ospo-local-meetup-japan-japanese-speaking-presents-9th-japan-ospo-local-meetup-supported-by-todo-group-and-openchain-japan-wg/) +* 通过[TODO Group 的 slack 频道](https://join.slack.com/t/thetodogroup/shared_invite/zt-169ok18cz-Pi6tpVHTeW9254d1FpkLew) 参与日常对话。`#chapter-japan` +## 📝 文档 +* [下载日语的开源项目办公室简易常见问题解答(进展中)](https://github.com/todogroup/todogroup.org/files/11635143/OSPO_SimpleQA.pdf) +* [下载英语的开源项目办公室简易常见问题解答(进展中)](https://github.com/todogroup/todogroup.org/files/11635143/OSPO_SimpleQA_en.pdf) diff --git a/content/zh-CN/guides/outbound-oss.md b/content/zh-CN/guides/outbound-oss.md old mode 100644 new mode 100755 index 9b05e050..62495082 --- a/content/zh-CN/guides/outbound-oss.md +++ b/content/zh-CN/guides/outbound-oss.md @@ -1,707 +1,700 @@ --- -title: A Guide to Outbound Open Source Software +title: 对外开源指南 --- -People can also download version 1.0 Guide as PDF [here](https://github.com/todogroup/todogroup.org/files/9560697/TODO_OutboundOSS_Report_v6.pdf) +人们也可从[这里](https://github.com/todogroup/todogroup.org/files/9560697/TODO_OutboundOSS_Report_v6.pdf)下载 1.0 版本指南的 PDF。 + +TODO 社区对通过这个[仓库](https://github.com/todogroup/outbound-oss)收到用于改进的修正和建议表示感谢,它包含有 TODO 指南的最新版本的文档。 + +- [简介](#简介) + - [目标与受众](#目标与受众) + - [成熟度级别](#成熟度级别) + - [公司如何管理开源:开源项目办公室](#公司如何管理开源开源项目办公室) + - [开源贡献的动机](#开源贡献的动机) + - [高效和高质量的构建软件](#高效和高质量的构建软件) + - [实施战略影响](#实施战略影响) + - [吸引,培养并留住人才](#吸引培养并留住人才) + - [回馈并维持开源的可持续性](#回馈并维持开源的可持续性) +- [如何为开源软件(OSS)做贡献](#如何为开源软件oss做贡献) + - [明确你的开源目标和战略](#明确你的开源目标和战略) + - [建立开源指导原则与流程](#建立开源指导原则与流程) + - [指导原则](#指导原则) + - [责任:决策权在于部门](#责任决策权在于部门) + - [流程的一般结构和范围](#流程的一般结构和范围) + - [精简流程](#精简流程) + - [边界条件](#边界条件) + - [公司审批贡献流程](#公司审批贡献流程) + - [为何需要审批流程?](#为何需要审批流程) + - [对外贡献者许可协议(CLA)](#对外贡献者许可协议cla) + - [向现有项目贡献的流程](#向现有项目贡献的流程) + - [贡献模式](#贡献模式) + - [小型贡献模式或者微贡献模式](#小型贡献模式或者微贡献模式) + - [主要版本到主要版本的发布模式](#主要版本到主要版本的发布模式) + - [完全信任模式](#完全信任模式) + - [批准项目贡献](#批准项目贡献) + - [业余时间贡献——也称为“兼职”](#业余时间贡献也称为兼职) + - [培训](#培训) +- [启动开源项目](#启动开源项目) + - [动机](#动机) + - [项目生命周期](#项目生命周期) + - [规划或者构思阶段](#规划或者构思阶段) + - [活跃或开发阶段](#活跃或开发阶段) + - [成熟或者维护阶段](#成熟或者维护阶段) + - [废弃或者生命周期结束阶段](#废弃或者生命周期结束阶段) + - [贡献者许可证协议(CLA),开发者原创证书 (DCO)](#贡献者许可证协议cla开发者原创证书-dco) + - [项目治理](#项目治理) + - [不同的项目级别](#不同的项目级别) + - [社区管理](#社区管理) + - [行为准则](#行为准则) + - [技术考量、工具与最佳实践](#技术考量工具与最佳实践) + - [用户管理](#用户管理) + - [设置仓库](#设置仓库) + - [提供许可证和版权信息](#提供许可证和版权信息) + - [CLA/DCO 管理](#cladco-管理) + - [凭据扫描](#凭据扫描) + - [质量标准/CII最佳实践徽章计划](#质量标准cii最佳实践徽章计划) + - [代码仓库审查](#代码仓库审查) + - [在发布开源项目时构建开源指标策略](#在发布开源项目时构建开源指标策略) +- [参考文献与缩写](#参考文献与缩写) + - [缩写](#缩写) + - [参考文献](#参考文献) +- [附录](#附录) + - [在 git 中管理工作与个人电子邮件](#在-git-中管理工作与个人电子邮件) -The TODO Community is grateful to receive corrections and suggestions for improvements via [this repo](https://github.com/todogroup/outbound-oss), which contains TODO guide’s updated documentation with the most recent version +# 简介 -- [Introduction](#introduction) - * [Maturity levels](#maturity-levels) - * [Motivation for open source contribution](#motivation-for-open-source-contribution) - + [Build software faster and better](#build-software-faster-and-better) - + [Exercise strategic influence](#exercise-strategic-influence) - + [Attract, grow and retain talents](#attract-grow-and-retain-talents) - + [Give back and keep open source sustainable](#give-back-and-keep-open-source-sustainable) -- [How to contribute to OSS projects](#how-to-contribute-to-oss-projects) - * [Define your open source goal and strategy](#define-your-open-source-goal-and-strategy) - * [Establish open source guiding principles and processes](#establish-open-source-guiding-principles-and-processes) - + [Guiding principle](#guiding-principles) - + [Responsibility: decision rests with unit](#responsibility-decision-rests-with-unit) - + [General structure and scope of the process](#general-structure-and-scope-of-the-process) - + [Process for expressing company approval for contributions](#process-for-expressing-company-approval-for-contributions) - * [Contribution models](#contribution-models) -- [Starting open source projects](#starting-open-source-projects) - * [Motivation](#motivation) - * [Project life cycle](#project-life-cycle) - + [Planning or Concept Phase](#planning-or-concept-phase) - + [Active or Development Phase](#active-or-development-phase) - + [Mature or Maintenance Phase](#mature-or-maintenance-phase) - + [Obsolete or End of Life Phase](#obsolete-or-end-of-life-phase) - * [Legal and governance considerations ](#legal-and-governance-considerations) - + [Which license to select](#which-license-to-select) - + [Contributor License Agreement (CLA), Developer Certificate of Origin (DCO)](#contributor-license-agreement-cla-developer-certificate-of-origin-dco) - + [Project governance](#project-governance) - + [Different Project Levels](#different-project-levels) - * [Community management](#community-management) - + [Code of Conduct](#code-of-conduct) - * [Technical considerations, tooling and best practices](#technical-considerations-tooling-and-best-practices) - + [User management](#user-management) - + [Setting up a repository](#setting-up-a-repository) - + [Providing license and copyright information](#providing-license-and-copyright-information) - + [CLA/DCO Management](#cladco-management) - + [Credential scanning](#credential-scanning) - + [Quality criteria / CII Best Practices Badge Program](#quality-criteria--cii-best-practices-badge-program) - + [Repository Linting](#repository-linting) - * [Build an open source metrics strategy when releasing to open source projects](#build-an-open-source-metrics-strategy-when-releasing-to-open-source-projects) +## 目标与受众 -# Introduction +本指南旨在指导公司如何为开源项目做出贡献或者发起一个开源项目(也叫做“对外开源”)。它旨在描述一个完整且精简的流程,该流程能够被任何规模(包括大型、小型或者中型)实施。公司可以根据自己的需求调整所提议的程序。例如,根据公司的规模和情况,并非所有的步骤都需要实施。 -## Goal and target audience +## 成熟度级别 -This guide is about how to contribute to or to launch an open source project (also called "outbound open source") as a company. It aims to describe a complete and lean process, that can be implemented in companies of any size (large but also small or medium sized organizations). Companies can tailor the proposed procedure to their needs. I.e., depending on the size and situation of the company not all steps need to be implemented. +开源软件(OSS)的企业采纳情况通常可以根据成熟度模型进行分类。这些层级描述了 OSS 是如何以一种越来越有效地方式创造价值和满足业务需求。区分不同成熟度层级的一个显著因素是组织如何处理外向型开源软件。一个关键的认知是,对开源生态系统的影响主要是通过参与和贡献开源项目来实现的。 -## Maturity levels +公司开源采纳的一个典型的成熟度模型如下(例如,参见 [Haddad:开源项目办公室](https://www.linkedin.com/pulse/open-source-program-offices-primer-organizational-roles-haddad)): -Corporate adoption of open source software (OSS) can typically be classified with a model of maturity levels. These levels describe how OSS is used in an increasingly effective fashion to drive value and address business needs. One of the distinguishing factors for the different maturity levels is how outbound open source is handled in an organization. The insight that influencing the open source ecosystem is mainly done by participation in and contributing to open source projects is seen as a critical factor. +1. 拒绝-没有或者没有使用开源软件的意识 +2. 消费-被动的使用开源软件 +3. 参与-加入开源社区 +4. 贡献-务实的为开源项目做贡献 +5. 领导层-战略性参与开源以推动业务价值 -A typical maturity model of corporate open source adoption looks like this (see for example [Haddad: Open Source Program Offices](https://www.linkedin.com/pulse/open-source-program-offices-primer-organizational-roles-haddad)): +要想从一个级别提升到另一个级别,需要采取一定的措施,并具备相应的结构和组织要素。 -0. Denial - No or unconscious use of open source -1. Consumption - Passive use of open source software -2. Participation - Engagement with open source communities -3. Contribution - Pragmatic contributions to open source projects -4. Leadership - Strategic involvement with open source to drive business value +从单纯的使用转变为积极参与的过程需要循序渐进。初期可以从非正式的、投入较少的活动开始,例如报告上游项目的漏洞。这类活动往往出于解决技术需求的考虑。在这个阶段,有关开源软件贡献的决策通常是临时性的,仅针对个别情况做出。 -To advance from one level to another, certain initiatives and structural and organizational elements are required. +确立专门的决策流程和正式的贡献政策将引领开源迈向下一个层级。这一级别的一个典型的步骤是建立开源项目办公室 (Open Source Program Office),以支持开源参与并维护开源战略和流程。 -Going from consumption to participation, for example, will start with informal engagement and low-effort activities such as reporting bugs in upstream projects, which typically is driven by technical needs. On that level, decisions about open source contributions will normally be ad-hoc and be taken for individual cases only. +在领导层级别,开源贡献的流程已经成熟且具备可扩展性。相应的工具链也已经到位。如果有必要且合适,将启动旨在创建新的开源社区的自有项目。这通常会伴随着利用开源基金会来推动跨公司协作,并战略性地利用开源来加速创造商业价值。 -Establishing dedicated decision making processes and formalizing contribution policies will lead to the next level. A typical step on this level is to establish an Open Source Program Office to support open source engagement and maintain an open source strategy and processes. +公司可能决定不升级到基于更多贡献的级别,当然,即使不贡献,也可以建立成熟的流程来使用开源软件。然而,大多数情况下,公司都会感受到一些回馈压力。这种压力可能来源于实际的技术需求(例如,缺少功能或者需要漏洞修复是向开源项目贡献的典型原因),或来自于在开源生态系统中承担责任的期望,或来自于从开原模型中获益的渴望。 -On the leadership level, contribution processes are mature and scale. Corresponding tool chains are implemented. Own projects with the goal to create new open source communities are started if that's required and appropriate. This will typically come with leveraging open source foundations to enable cross-company collaboration to strategically use open source to accelerate creating business value. +## 公司如何管理开源:开源项目办公室 -A company may decide to not progress to levels which are based on more contributions, and it's of course possible to build mature processes to consume open source software without contributing. In most cases, there will be some pressure to contribute back, though. This can arise from practical technical needs (missing functionalities or required bug fixes are typical reasons for contributing to open source projects), from the expectation to take responsibility in the open source ecosystem, or from the desire to reap the full benefits of the open source model. +随着参与开源软件的程度加深,越来越多的组织意识到企业内部开源管理以及开源生态系统固有复杂关系带来的挑战。因此,有许多组织开始成立开源项目办公室(Open Source Program Offices,OSPOs),或者叫一些其他名称,例如开源技术中心,开源社区发展团队等。OSPOs 是组织内部专门负责支持、培育、分享、解释和推动开源发展的地方。有了这样的办公室,企业可以以明确地条款和职责来制定和执行其开源战略,为领导者、开发人员、营销人员和其他员工提供所需的流程和工具,帮助他们在运营中成功运用开源。 -## How companies manage open source: Open Source Program Offices +针对如何启动开源项目办公室(OSPO),TODO Group 提供了一[系列指南](https://todogroup.org/guides/)。对于刚接触该主题的公司而言,可以优先查看[**如何创建一个开源项目**](https://todogroup.org/guides/create-program/)指南。 -An increasing number of organizations realized the tasks of managing open source in an enterprise and complex relationships that are inherent to the open source ecosystem when they are advancing in their engagement in open source. For this reason, many of them started Open Source Program Offices (OSPOs), something called differently, for example Open Source Technology Centers, Open Source Community Development Team etc. OSPOs are a designated place where open source is supported, nurtured, shared, explained, and grown inside an organization. With such an office in place, businesses can establish and execute on their open source strategies in clear terms and responsibilities, giving their leaders, developers, marketers, and other staff the processes and tools they need to make open source a success within their operations. +## 开源贡献的动机 -The TODO Group offers a [set of guides](https://todogroup.org/guides/) on how to get started with an OSPO. Companies that are new to this topic, might want to first take a look at [**How to create an open source program**](https://todogroup.org/guides/create-program/) +投身开源项目或者发起新项目的动机多种多样。这里,我们仅列举部分示例. -## Motivation for open source contribution +## 高效和高质量的构建软件 -There is a broad spectrum of motivations for contributing to open source projects or starting new projects. Here, we can only list some examples. +使用开源软件通常可以加快开发的速度并降低开发的成本,因为您可以利用现有的经过功能测试的代码进行构建。然而,一个存在的风险是社区可能无法迅速地提供所需的功能或者漏洞修复。为了缓解这一风险,培养必要的技能并自行创建这些漏洞修复和/或功能可能是有意义的。将它们回馈给上游项目具有重要的好处: -### Build software faster and better +* 可以直接在自己的产品和服务中直接使用上游版本 +* 在更短的时间周期内使用更多的功能 +* 在更短的时间周期内实现更高的质量 +* 获得核心专家支持 -Consuming open source software typically increases the development speed and decreases development costs since one builds upon existing code and a working and tested functionality. One risk however is that required features or bug fixes are not provided by the community as quickly as needed. To mitigate that risk, it might make sense to build up the required skills and create these bug fixes and/or features yourself. Contributing them back to the upstream projects has important benefits: +### 实施战略影响 -* Integrating "own" features into upstream projects makes maintenance a lot easier -* Upstream versions can be directly used in own products and services -* More features are obtained in shorter period of time -* Higher quality is achieved in shorter period of time -* Support available from core experts +除了上面提到的开源软件在开发速度和质量的优势外,为开源项目做贡献在战略层面也很重要。在开源世界中,声誉和影响力通常是通过参与社区和贡献来建立的。因此,对开源项目的贡献有助于... -### Exercise strategic influence +* 影响上游开源项目的发展方向 +* 获得开源软件包(共同)的版权 +* 获取所有对软件感兴趣的人的创造力 -In addition to the benefits of open source software wrt. development velocity and quality mentioned above, contributing to open source projects can also be important from a strategic point of view. In the open source world, reputation and the ability to influence is typically build up by engaging in the community and by contributing. Thus, contributions to open source projects can help to ... +有时,公司倾向于使用金钱来施加影响。但在开源项目中这并不是最有效的方法。影响力的“货币”是贡献,因为开源项目通常更多地由个人的工作驱动,而不是委员会的决策。因此,与单纯成为某个组织的成员或者支付支持费或其他服务相比,贡献代码更加直接、更有效。 -* influence the direction of upstream open source projects -* gain (co)copyright on open source software packages -* access to the creativity of everyone interested in software +开源社区(尤其是那些由大的开源基金会运营的)为公司和其他组织之间的合作提供了一个中立的场所。因此,开源方式可以为公司提供与供应商、客户、合作伙伴甚至竞争对手合作的新途径,仅举一些行业或领域特定的项目为例,如 [Linux Foundation Energy](https://www.lfenergy.org/) 或 [Eclipse Tractus-X](https://projects.eclipse.org/proposals/eclipse-tractus-x)。建立开源社区也是创建和维护生态系统以及建立事实标准的有力手段。 -Companies sometimes have the tendency to use money to exert influence. With open source projects this is not the most effective method. The currency of influence is contributions, because open source projects are usually much more driven by the work of individuals than the decisions of committees. So contributions work much more directly and effectively than being a member in an organization or paying for support or other services. +### 吸引,培养并留住人才 -Open source communities (particularly those run by the big open source foundations) provide a neutral place for collaboration between companies and other organizations. Thus, an open source approach could offer new ways of collaboration with suppliers, customers, partner and even competitors, just to mention industry- or domain-specific projects such as [Linux Foundation Energy](https://www.lfenergy.org/) or [Eclipse Tractus-X](https://projects.eclipse.org/proposals/eclipse-tractus-x). Establishing open source communities can also be a powerful means to create and maintain ecosystems and to establish de facto standards. +软件(因此也包括开源软件)在许多的产品和领域变得越来越普遍。因此,对于许多公司来说,拥有一个技术成熟且积极进取的软件开发团队至关重要。这不仅适用于软件或者云计算公司,也适用于其他行业的公司,例如将软件越来越多地集成到产品中的传统硬件制造商,或者因数字化转型而越来越依赖软件的其他公司。一项包含开源贡献和社区参与的开源战略可以起到一下支持作用: -### Attract, grow and retain talents +* 提高开发者的满意度 +* 通过核心专家对每项贡献进行同行评审,提高软件质量和提升开发者的技能 +* 将公司塑造成有吸引力的主顾 +* 提高公司声誉,从而提高开发者在其社区中的地位。 -Software (and therefore also open source software) becomes more and more ubiquitous in many products and areas. Thus, for many companies it is crucial to have a skilled and motivated software development workforce. This is not only true for software or cloud companies, but also for companies from other segments, such as traditional hardware producers who integrate software into their products more and more, or any other company which is becoming more dependent on software due to accelerating digital transformation. An open source strategy including open source contributions and community engagements supports this: +### 回馈并维持开源的可持续性 -* increase developer satisfaction -* improve quality and boosts developer skills by peer review of each contribution by core experts -* make company visible as an attractive employer -* improve company's reputation, and with it the standing of developers in their communities +开源软件的发展依赖于其社区。如上所述,开源软件的使用有助于降低成本并且加速开发,但这唯一的可能是因为项目背后拥有维护软件的社区。为了保持开源软件开发模式的可持续性,每个开源软件的使用者都有责任思考如何支持这些项目。以下是一些参与和支持的方式: -### Give back and keep open source sustainable +* 在代码,文档,时间(例如通过软件测试)方面的贡献 +* 资金支持(一些重要项目是由开发者在业余时间维护的,因此只能为项目投入有限的时间) +* 举办并支持编程马拉松活动 -Open source software development is living from its communities. As mentioned above, the consumption of open source software helps to decrease costs and speed up development, but that's only possible because there is the community behind these projects maintaining the software. To keep the open source development model sustainable, each consumer of open source software has therefore the responsibility to think about ways how to support these projects. These are some ways of engagement and support: +需要理解的是,虽然使用开源软件无需支付许可费用,但它并非免费可用。为保持这些项目对用户的吸引力,需要稳定的参与和支持。因此,制定适宜的开源贡献战略至关重要。 -* contributions in terms of code, documentation, time (by testing software, for example) -* monetary support (some important projects are maintained by developers who do this in their spare time and thus can only invest limited time in the project) -* executing and supporting hackathons +# 如何为开源软件(OSS)做贡献 -It is important to understand that though open source software has no license costs when consuming it, it is not available for free. To keep these projects attractive for its consumers, steady engagement and support is required. That's why it is important to have a strategy for open source contributions in place. +与开源软件生态系统构建良好的关系具有其自身的一系列挑战,但是如果你有一个清晰地计划可供遵循,这会变得更容易。这里给出一些组织可以采纳的多种实践指南。 -# How to contribute to OSS projects +## 明确你的开源目标和战略 -Building better relationships with the open source ecosystem has its own set of challenges, but it becomes easier if you have a clear plan to follow. Here are some guidelines to a number of practices that organizations can adopt. +你的开源战略将管理、参与和创建开源软件的计划与这些计划服务的业务目标相结合。这可以带来许多机会并促进创新。TODO Group 提供了一份关于[制定开源战略](https://todogroup.org/guides/strategy/) +的专门指南。 -## Define your open source goal and strategy +## 建立开源指导原则与流程 -Your open source strategy connects the plans for managing, participating in, and creating open source software with the business objectives that the plans serve. This can open up many opportunities and catalyze innovation. The TODO Group offers a dedicated guide to [Setting an Open Source Strategy](https://todogroup.org/guides/strategy/) +### 指导原则 -## Establish open source guiding principles and processes +以下描述的流程旨在确保公司利益及其员工得到保护。我们还需要确保所做的贡献符合版权法、出口规定、数据保护规定和开源开发的最佳实践。另一方面,对于所有涉及的利益相关者来说,流程负担应尽可能低,审批流程也不应该花费太多时间。 -### Guiding principles +### 责任:决策权在于部门 -The procedure described in the following is designed to ensure that the company interests and its employees are protected. We also need to make sure that contributions are in line with copyright law, export regulations, data protection regulations and open source development best practices. On the other hand, the procedural burden for all to be involved stakeholders shall be low and the approval procedure should not take too much time. +* 审批流程由资助相关代码开发的组织负责 +* 如果受影响的代码/知识产权(IP)由其他部门使用、共同开发或共同资助,则应将其作为发布决策的利益相关者参与进来 -### Responsibility: decision rests with unit +### 流程的一般结构和范围 -* The approval procedure is the responsibility of the organization that financed the development of the code in question -* If the affected code/IP is used, co-developed or co-financed by other units, involve them as stakeholders in the release decision +#### 精简流程 -### General structure and scope of the process +* 开发者需要执行的任务应清晰、简单,并尽可能减少工作量 +* “后端任务”潜在的复杂性不应该让开发者看到。要求的当前状态应该对开发者可见 -#### Lean procedure +#### 边界条件 -* The tasks to be carried out by the developer should be clear, simple, and cause as little effort as possible -* The potential complexity of the “backend tasks” should not be visible to the developer. The current status of the request shall be visible to the developer +* 保护我们的员工和商业利益 +* 遵守法律以及内部和外部的规定。 +* 向决策者提供提供透明度,说明公司的那些代码和知识产权将受到发布的影响,以及影响程度 +* 所有贡献应该使用“公司”邮箱进行( GitHub 活动也类似),以便轻松识别公司的所有贡献 +* 尊重开源生态系统和目标开源项目的规则和惯例 -#### Boundary conditions +### 公司审批贡献流程 -* Protect our employees and our business interests -* Act in compliance with law as well as with internal and external regulations -* Provide transparency to the decision makers on what and how much of the companies' code and IP will be affected by the publication -* All the contributions shall be made with the “company”-email (similar for the GitHub activity) so that all contributions of the company can be identified easily -* Respect the rules and customs of the OSS ecosystem and of the target OSS project +#### 为何需要审批流程? -### Process for expressing company approval for contributions +为何需要遵循特定的程序? -#### Why is it needed? +首先,版权发有明确规定。 -Why is there a need for a certain procedure at all? +例如,《德国版权法》第 69b 条规定:受雇于某人或为某人服务的作者(1)若计算机程序是雇员在其职责范围内或按照雇主的指示创作的,则雇主应独家享有对该计算机程序的所有经济权利,另有约定的除外。 -First of all, the copyright law requires it. +来源:《[德国版权法](https://dejure.org/gesetze/UrhG/69b.html)》 -For example, the German copyright act states in Section 69b: -Authors in employment or service relationships -(1) Where a computer program is created by an employee in the execution of his duties or following the instructions of his employer, the employer exclusively shall be entitled to exercise all economic rights in the computer program, unless otherwise agreed. +这意味着,在此背景下开发的所有软件均属于雇主的财产,即开发人员工作的公司所有。《德国版权法》至少没有将所有权限定于工作时间或公司IT基础设施内开发的代码,它只界定了背景范围。 -Source: [German Copyright Act](https://dejure.org/gesetze/UrhG/69b.html) +其次,需要遵循一定的程序来确保公司的商业利益以及保护员工。最后,公开代码既是公司的商业名片,也是编写该代码的开发者的名片。 -This means that all the software developed in this context is the property of the employer - i.e., the company the developer is working for. At least the German copyright act does not limit the proprietorship to code developed during working hours or within the company IT infrastructure, it only scopes the context. +#### 对外贡献者许可协议(CLA) -Secondly, a procedure is required to protect the company’s business interests as well as to protect the employee. Finally public code is like the business card of a company as well as of the developer who has written the code. +一些开源软件项目以及开源软件基金会,在接受贡献之前,会要求签署贡献者许可协议(CLA)。我们至少知道两种不同类型的 CLA: -#### Outbound CLA +* 企业贡献者许可协议(CCLA) +* 个人贡献者许可协议(ICLA) -Some OSS projects as well as some OSS Foundations require a Contributor License Agreement (CLA) before they accept contributions. We know at least two different types of CLAs: +项目是否不需要,或者需要其中一种或两种 CLA,通常会在项目仓库中的 CONTRIBUTING.md 等文件中说明。APache 基金会制定的 CCLA 和 ICLA 是 CLA 的实际标准,许多开源软件项目已经采用其中的一种或者两种。 -* Corporate Contributor License Agreement (CCLA) -* Individual Contributor License Agreement (ICLA) +贡献者协议(CLA)的目的是给开源软件(OSS)项目提供信心,即贡献者有权提交其贡献。开发者原创证书(DCO)是一种替代方法,与CLA相比更加轻量级。 -Whether none, one or both are required for contributions is usually described in files like `CONTRIBUTING.md` in the project repositories. The [CCLA](https://www.apache.org/licenses/cla-corporate.pdf) and the [ICLA](https://www.apache.org/licenses/icla.pdf) authored by the Apache Foundation are the de facto standard of CLAs and many OSS projects have adopted either one or both. +一些贡献者协议(CLA)还会要求将额外的权利转移给项目,例如以额外的、通常是专有许可证发布代码的权利。这是一种不对等的设置,不利于贡献者。因此大多数公司将不会向此类项目贡献代码。 -The purpose of a CLA is to provide confidence to the OSS project that the contributor is entitled to submit the contribution. A Developer Certificate of Origin (DCO) is a an alternative approach and more lightweight compared to a CLA. +开源软件项目提升信心的代价是贡献者所在的组织需要承担更多的额外工作。尤其是在拥有多家附属公司的大型企业中,评估、签署和维护企业贡献者许可协议(CCLA)所需的工作量不容小觑。 -Some CLAs also require to transfer additional rights to the project such as the right to release the code under an additional, often proprietary license. This is an asymmetric setup which puts contributors at a disadvantage. Therefore most companies will not contribute to these kind of projects. +为什么大型组织使用企业贡献者协议(CCLA)会带来额外的工作量?让我们以 Apache 基金会的 CCLA 为例来简单的看一下为什么造成这种情况: -The price of improved confidence for the OSS project is more overhead in the organization the contributor is working for. Especially in case of large corporations with several affiliates the effort of evaluating, signing and maintaining a CCLA shall not be underestimated. +* CCLA 是一个合同——在许多组织中,都实行“四眼原则”——合同必须由两名有权代表组织签署合同的人员签署——可能需要另外两名利益相关者的参与,这需要在像他们进行情况介绍方面付出额外的努力。 +* 通常 CCLA 不仅覆盖贡献者所工作的特定法律实体,还覆盖其所有附属公司: + * 对于法律实体而言,做出贡献的实体以及控制的实体、被该实体控制或与该实体处于共同控制之下的所有其他实体都被视为单个贡献者。在本定义中,“控制”是指 (i) 直接或间接拥有导致该实体方向或管理发生变化的权力,无论是通过合同还是其他方式。(ii) 拥有该实体已发行股份的百分之五十(50%)或更多,或 (iii) 对该实体享有受益所有权。 +* CCLA 除了包括版权授权外,还包括专利授予。这没什么问题,不过,组织内部的“知识产权部门”需要参与 CCLA 的评估过程,并针对具体的贡献,“知识产权部门”还需要与所有附属公司进行同步。 +* CCLA 需要被组织的“法律部门”分析。 -Why is a CCLA causing additional effort in large organizations? Let's briefly look at the CCLA of the Apache Foundation as an example: +一些 CCLA 要求将贡献的版权转让给 OSS 项目/基金会。版权转让是一个需要付出更多努力的话题,并且可能根本不会被接受。 -* The CCLA is a contract - in many organizations the "four eyes principle" is implemented - a contract has to be signed by two persons, who have the right to sign contracts in the name of the organization - the required involvement of probably two more stakeholders requires additional effort in briefing them -* Usually a CCLA covers not only the specific legal entity the contributor is working for, it also covers all affiliates: - * For legal entities, the entity making a Contribution and all other entities that control, are controlled by, or are under common control with that entity are considered to be a single Contributor. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity -* The CCLA includes besides the copyright grant a patent grant. This is fine, nevertheless inside the organization the "IP department" needs to be involved in the evaluation process of the CCLA and for the specific contribution the "IP department" need to sync with all affiliates -* The CCLA needs to be analyzed by the "Legal department" of the organization. +除了上面提及的额外工作,CCLA 还给组织增加了额外的“维护工作”,因为它要求组织提名所有有资格的贡献者的姓名给 CCLA 要求方。 -Some CCLAs require that the copyright of the contributions are assigned to the OSS project/Foundation. Copyright assignment is a topic which causes even more effort and might not be accepted at all. +您有责任在需要变更代表公司提交贡献的指定员工名单或公司与基金会之间的联系人时,及时通知基金会。 -Besides the above-mentioned additional effort the CCLA adds additional "maintenance effort" to the organization, because it requires that the organization nominates all entitled contributors by name to the CCLA requiring party. +* 签署的 CCLA 必须在公司内部公开——这可以通过在 OSPOs 网站上易于员工发现的位置上发布 CCLA 实现(例如,设立一个名为 CCLAs 的“顶层页面”可能很有用,该页面包含“已签署 CCLAs”列表,“正在评估的 CCLAs”列表,以及“已经拒绝的 CCLAs”列表。 -It is your responsibility to notify the Foundation when any change is required to the list of designated employees authorized to submit Contributions on behalf of the Corporation, or to the Corporation's Point of Contact with the Foundation. +* 所有附属公司都需要得到通知,并需要确定一个流程,以明确附属公司如何提名或取消提名为他们工作的贡献者。如果附属公司无法访问签署实体的内部网络,情况将变得更加复杂。在这种情况下,需要将已签署的 CCLA 或关于已签署 CCLA 的信息发送给所有附属公司的 OSPO。如果附属公司没有设立 OSPO,则必须将信息转发给负责软件开发的相关部门。所有附属公司需要提供已提名贡献者或前贡献者的姓名,这些贡献者将不再有权向签署实体的 OSPO 做出贡献,然后 OSPO 必须向基金会/项目通报贡献者名单的变更情况。 +* 在组织内部公布贡献者名单并向基金会/项目披露名单,可能还需要相关实体的数据保护官的批准。 -* The signed CCLA has to be made available inside the organization - This can be done via publishing the CCLA on the OSPOs website at a location which can be found easily be the employees (e.g., it might be useful to have a "top level page" named CCLAs, this page then contains a list of "signed CCLAs", a list of "CCLAs under evaluation", and a list of "denied CCLAs".) +这些额外的努力可能阻止组织向上游的开源软件(OSS)贡献小的漏洞修复、补丁甚至是新的功能,从而使他们面临私有分叉的风险,最终在长远来看带来大量额外的开发工作。因此,关于是否进行贡献的决策需要非常谨慎地做出。 -* All affiliates need to be informed and a procedure needs to be defined how the affiliates can nominate/de-nominate contributors working for them. This becomes even more challenging in case an affiliate has no access to the intranet of the signing entity. In this case the signed CCLA or the information about the signed CCLA needs to be sent to the OSPOs of all affiliates, in case an affiliate has no OSPO set up, the information must be routed to the function, which is in charge of software development. All affiliates need to provide the names of nominated contributors or former contributors, who shall not be entitled anymore to do contributions to the OSPO of the signing entity, which then must inform the Foundation/project about the change of the list of contributors. -* Publishing the list of contributors inside the organization and disclosing it to the Foundation/project might also require the approval of the data protection officers of the involved entities +与 CLA 相比,DCO 是一个更轻量级的过程。它被引入是为了增强人们对 Linux 内核贡献者所做贡献是“合法正确”的信心。许多开源项目都使用 [DCO 1.1 版本](https://developercertificate.org/)。 -This additional effort may hold organizations off to contribute small bug fixes or patches or even new features to the upstream OSS projects and puts them to risk of private forks and thus a lot of additional development effort in the long run. Thus the decision not to contribute needs to be taken very carefully. +DCO 与 CLA 相比主要的区别在于,DCA 不是一份合同,而是一种来自特定贡献者的证明,表明他们有权提交具体的贡献代码。因此,签署和维护 CLA 所花费的精力在 DCO 中是不需要的。需要执行的任务仅有: -A DCO in contrast to a CLA is a much more lightweight procedure. It was introduced to enhance the confidence that contributions to the Linux kernel are made "legally correct" by the contributors. The [DCO version 1.1](https://developercertificate.org/) is used by many OSS projects. +* “法务部门”对 DCO 进行评估 +* “知识产权部门”进行评估。 +* 特定贡献者进行评估,判断其是否可接受。 -The main difference of a DCO compared to a CLA is, that a DCO is not a contract, it is a kind of attestation of the specific contributor that they are entitled to submit a concrete contribution. All the effort which has to be spent to get a CLA signed and maintained is not needed. The only tasks which have to be carried out are: +因为 DCO 1.1 版本是“标准”,因此“法务部门”和“知识产权部门”仅需要花费很少的精力。 -* Evaluation of the DCO by the "Legal department" -* Evaluation by the "IP department" -* Evaluation by the specific contributor, whether it is acceptable for them +## 向现有项目贡献的流程 -Since the DCO version 1.1 is the "standard" the "Legal"- and "IP department" only have very little effort to spend. +发布已开发的代码所处的业务环境越复杂,涉及的利益相关者就越多。下图展示了一个涉及所有职能的程序,即使在复杂的情况下也能适用。 -## Procedure for contributions to existing projects +![contributions](/img/guides/outbound-oss1-t.png) -The more complex the business environment in which the code to publish was developed, the more stakeholders need to be involved. The picture below shows a procedure that involves all functions, even in a complex setup. +使用的缩写 -![contributions](/img/guides/outbound-oss1.png) +* CLA = 贡献者许可协议 +* DCO = 开发者起源证书 +* ECC = 出口管制与海关 +* IP = 知识产权 -Abbreviations used: +上述过程不适合频繁贡献者和/或在日常工作中“上游”工作的贡献者。对于这些开发者,需要建立不同的流程,以避免给他们承担“非生产性”工作负担。组织中可以建立不同的共享模型,以满足不同的需求。 -* CLA = Contributor License Agreement -* DCO = Developers Certificate of Origin -* ECC = Export Control and Customs -* IP = Intellectual Property +### 贡献模式 -The procedure shown above is not suited for frequent contributors and/or contributors who are working “upstream” in their daily work. For these developers different procedures need to be established in order to avoid loading them with “unproductive” work. Different contribution models can be established in an organization to serve different needs. +以下方法适合这类开发者: -### Contribution models +* 小型贡献模式 +* 主要版本到主要版本的发布模式 +* 完全信任模式 -The following approaches are suited for such developers: +![small-contributions](/img/guides/outbound-oss2-t.png) -* Small contributions model -* Major to major release model -* Full trust model +#### 小型贡献模式或者微贡献模式 -![small-contributions](/img/guides/outbound-oss2.png) +小型或者微型贡献是指对现有开源软件进行一些较小且简单的改动。这类贡献的典型例子包括漏洞修复,但这些漏洞的知识产权价值通常较低或者没有。 -#### Small contributions model or trivial contributions +以下情况不属于微型更改: -A small or trivial contribution is a rather small and simple change to already existing open source software. Typical cases found in this category are bug fixes with no or low Intellectual Property value. +* 功能的添加或改动 +* 开源软件组件的接口更改 +* 显著提升性能的优化 +* 包含对软件工程师而言并非显而易见的设计或算法 -A change is not trivial if: +该程序适用于小贡献。在首次向特定开源开源软件项目或组件贡献代码后,可以对小贡献或微型贡献采用该程序。首次贡献必须经过完整流程(如上所述),因为该项目可能需要检查并签署贡献者协议(CLA)/开发者证书(DCO)等文件。在首次贡献代码后,所有后续的小型贡献都可以直接提交给该开源软件项目,无需再遵循既定程序,也不管该项目处于哪个版本。 -* Functionality is added or changed. -* The interface of the open source software component is changed. -* It is an optimization that more than insignificantly increases performance. -* It contains a design or an algorithm that wouldn’t be obvious for a software engineer. +#### 主要版本到主要版本的发布模式 -This procedure scopes small contributions. It can be implemented for small or trivial contributions following the initial contribution to a particular OSS project or component. The initial contribution has to undergo the entire procedure described above, because CLAs/DCOs etc. have to be checked and signed in case the particular project requires them. -After the initial contribution all subsequent small contributions can be contributed directly to the OSS project without the need to follow the defined process no matter which version of the OSS project. +该过程规定了向开源软件项目提交贡献的发布周期。它与其他任何贡献具有相同的“起点”——首次贡献必须遵循完整流程,以便确认贡献者协议(CLA)/开发者证书(DCO)等事宜,并获得对特定项目的贡献许可。在首次贡献之后,在新主要版本的开发期间,所有后续贡献都可以直接贡献给开源软件项目,而无需经过审批流程。对贡献的大小没有限制。贡献可以是从简单的错误修复到添加新功能、更改接口、重构等。在项目主要版本发布后,针对主要版本发布后的首次贡献,必须启动新的审批程序。 -#### Major to major release model +#### 完全信任模式 -This procedure scopes the release cycle of the OSS project to which contributions shall be made. It has the same “starting point” like any other contribution - the initial contribution must implement the entire procedure in order to check CLAs/DCOs and to have the documented permission to contribute to a specific project. After the initial contribution all subsequent contributions during the development of a new major release can be contributed to the OSS project without the need to go through the approval process. There is no size limitation for contributions. The contributions can range from a trivial bug fix to adding new features, changing interfaces, refactoring and so on. After the release of a major version of the project a new approval procedure has to be kicked off for the first contribution after the major release. +完全信任模式适用于已经成功遵循主要版本到主要版本发布模式的开发者。这是一种对员工的激励以及雇主对员工信任的表现。基本上,它是允许开发者在没有任何审批程序的情况下“上游”工作的许可。由于该模式仅在开发人员已经成功遵循主要版本到主要版本发布的模式后才会应用,因此无需再进行包含完整审批程序的“初始”贡献,尽管处于文档记录的目的进行初始贡献仍然是合理的。 -#### Full trust model +主要版本到主要版本的发布模式以及完全信任模式应当只能由高级开发者来实施,他们应当接受过专门的版权原则培训,对他们所工作的公司的商业利益有深入的了解,践行“主人翁文化”,并在开源生态系统中拥有丰富经验。 -The full trust model can be applied to developers who have already successfully worked under the major to major release model. It is an incentive for the employee and a sign of trust of the employer towards the employee. Basically it is the permission for the developer to work “upstream” without any approval procedure. Since this model shall only be applied after the developer worked successfully under the major to major release model, there is no need for an “initial” contribution with the entire approval procedure, although it makes sense in order to have it documented. +为了追踪所有贡献,开发者们应当使用其官方电子邮件地址进行贡献。 -The major to major release model as well as the full trust model shall only be executed by senior developers, who are specially trained in copyright principles, have a good understanding of the business interests of the company they are working for, practice “an ownership culture” and have already deep experience in the open source ecosystem. +### 批准项目贡献 -In order to track all the contributions the developers shall contribute with their official email address. +另一种模式是为具体的项目提供审批。这些项目已经被例如 OSPO 进行检查,如果一切就绪,允许员工贡献代码,则项目会被批准接受贡献。然后,对于每个具体的贡献就不再需要进行单独审批。但是,如果项目的总体条件发生改变,例如许可证或者引入 CLA 等,项目需要由 OSPO 重新进行批准。 -### Approving projects for contributions +这种模式的前提条件是贡献者们具备自主进行贡献的资格。这可以通过确保贡献者们已经受到培训和/或追踪和批准哪些人可以向哪些仓库贡献代码来实现。 -Another model is to provide approval for specific projects. These projects are checked, e.g. by the OSPO, and if everything is in place to allow contributions, they are cleared for contributions by employees. Then there is no individual approval for each specific contribution required. But if the general conditions of the project change, such as license or introduction of a CLA, etc. the project needs to be cleared again by the OSPO +### 业余时间贡献——也称为“兼职” -Prerequisite for such a model is that contributors are qualified to do contributions autonomously. This can be achieved by making sure contributors have received training and/or tracking and approving who can contribute to which repository. +当员工们想要在业余时间为不属于公司范畴的开源软件(OSS)项目做贡献时,应该怎么做? -### Spare-time contributions - also known as "moonlighting" +在这种情况下,版权所有权将归开发人员所有(假设他们不是为其他实体开发软件)。为了清楚起见,可以实施以下程序: -What to do in case an employee wants to contribute to OSS projects in their spare time which do not fall under the corporate context? +开发者告知他或她的经理打算为某个项目(不属于德国版权法的第 69b 中的范围)做出贡献的意向。如果经理没有异议,他/她可以起草一份简短的说明,至少包括以下内容: -In this case the copyright ownership stays with the developer (assuming they are not developing for another entity). In order to provide clarity the following procedure can be implemented: +* 会议日期 +* 员工希望参与贡献的项目 +* 预计每周投入的时间 +* 经理的批准 +* 开发者的签名 +* 经理的签名 -The developer informs his or her manager about the intention to contribute to a certain project (which is out of scope of section 69b German Copyright Act). In case the manager has no objections he/she draft a small note with, at least, the following content: +可以将这份说明发送给人力资源(HR)部门,并将其保存在员工的人事档案中。 -* Date of the meeting -* Project(s) the employee wants to contribute to -* Estimated hours per week -* Approval by the manager -* Signature of the developer -* Signature of the manager +该程序提供了透明性,尤其是在那些涉及多个软件技术领域的大型企业情况下。 -The note can be sent to the HR department to keep it in the personnel record of the employee. +下面的例子将阐述为什么这样的程序是有意义的: -This procedure provides transparency especially in the context of large enterprises, acting in many different software technology areas. +例如,根据职责,开发者可能是实现 Linux 内核驱动。开发者另一个感兴趣的领域比如是人工智能(AI),其想要在业余时间为 AI 项目做贡献。由于 AI 项目与 Linux 内核驱动开发没有关系,因此开发者对自己贡献的代码拥有版权以及版权所有权不用转移给雇主。开发者在贡献代码时不需要经过雇主批准。 -The example below shall illustrate why such a procedure makes sense: +但是,当开发者决定转到公司内部另一个开发 AI 的部门时会怎么样?突然之间,以前被视为“兼职”的工作现在就属于著作拳法第 69b 条的规定,著作权的所有者也变成了雇主。 -A developer may, for example, implement Linux kernel drivers according to his duties. Another area of interest of the developer is for example AI and the developer wants to contribute to an AI project during his spare time. -Given that the AI project has nothing to do with Linux kernel driver development, the developer holds copyright on his contributions and the copyright ownership is not transferred to the employer. The developer can contribute code without the need of an approval by his employer. +上述程序在整个过程中提供了关于版权所有权及其变更的透明度。 -But what about when the developer decides to move to another department inside the company, which develops AI. All of a sudden the former "moonlighting" is now covered by section 69b of the copyright act and the copyright owner now is the employer. +## 培训 -The above described procedure provides transparency about the copyright ownership and its change during the time. +开源项目贡献者需要一定程度的自主性才能发挥作用。对一些公司软件开发者来说,参与开源社区也是一个新兴事物。出于这些原因,支持企业贡献者并为他们提供培训或其他类似手段,帮助他们发展理解和技能,以代表公司成为开源世界的好公民,这一点至关重要。 -## Trainings +这些可以通过指导,良好的实践指南,或者培训来实现,其包括以下主题: -Contributors to open source projects will need to act with a certain degree of autonomy to be effective. For some corporate software developers it will also be new to participate in open source communities. For these reasons it is important to support corporate contributors and provide them with training or similar means to develop the understanding and skills to act as good citizens of the open source world on behalf of your company. +* 开源的法律问题的基础知识,例如版权,许可证,CLAs,DCOs,商标等。 +* 了解公司对于开源贡献的规则和政策。 +* 开源社区文化 +* 典型的开源开发流程 +* 开源治理的不同形式,例如基金会或者单一供应商项目 +* 公开工作 +* 处理开源项目和公司之间的利益冲突 +* 在遇到疑问和问题时,从哪里获取内部支持? -This can be achieved with mentoring, good practice guides, or trainings which cover the following topics: +# 启动开源项目 -* Essentials of legal implications of open source, such as copyright, licensing, CLAs, DCOs, trademarks -* Awareness of your corporate rules and policies for contributing to open source -* Open source community culture -* Typical open source development procedures -* Open source governance in its different forms such as foundations or single-vendor projects -* Working in public -* Dealing with conflict of interests between open source project and company -* Where to get internal support in case of doubt or questions +## 动机 -# Starting open source projects +有许多好的理由启动自己的开源项目。请查看[介绍](https://todogroup.org/zh-cn/resources/guides/a-guide-to-outbound-open-source-software/#motivation-for-open-source-contribution)中描述的如此做的动机。 -## Motivation +启动一个新的开源项目与产品发布类似,它首先是一个软件开发项目——在规划、预算、人员配备和测试等方面,它与内部软件项目开发没有区别——唯一的区别是,所有工作都在公共领域进行。请注意,公开可用的源代码是组织在软件生态系统中的“名片”,也是其维护者的“名片”。 -There are many good reasons to start own open source projects. See the [introduction](#motivation-for-open-source-contribution) for some of the motivations for doing this. +当考虑启动自己的开源项目时,这里有几个阶段你应当考虑: -Launching a new OSS project is comparable to a product introduction and it is, at first hand, a software development project - there is no difference to an internal software development project concerning planning, budget, staffing, testing etc. - the only difference is that everything happens in the public area. Be aware that publicly available source code is the “business card” of the organization to the software ecosystem, and it is also the “business card” of its maintainers. +![oss-project-process](/img/guides/outbound-oss3-t.png) -When thinking about to start an own OSS project there are several phases you should consider: +## 项目生命周期 -![oss-project-process](/img/guides/outbound-oss3.png) +开源项目的生命周期描述了项目从构思到退役或者生命周期结束阶段的演变过程。通常,一个项目是为了解决某个特定的问题而产生的。它可能会因为问题不在存在或因为其他项目更适合解决该问题而变得过时。下面的图展示了开源软件项目可能经历的不同阶段。 -## Project life cycle +![Typical lifecycle of an open source project](/img/guides/outbound-oss4-t.png) -The life cycle of an open source project describes the stages in which the project evolves, from its conception to its retirement or end of life stage. Typically, a project originates to solve a specific problem. It may become obsolete either because the problem does not exist anymore or because other projects are better suited to solve the problem. The figure below shows the different stages an open source project may undergo. +### 规划或者构思阶段 -![Typical lifecycle of an open source project](/img/guides/outbound-oss4.png) +这是每个开源项目的开始。它也可以被称为“初始化阶段”。通常,在该阶段,只有一个想法存在或者一个特定的已经明确的问题需要解决方案。在这个阶段,开源项目具有以下的典型特征。 -### Planning or Concept Phase +* 项目打算解决的问题已经被明确的定义。 +* 目前还没有源代码可用,或者源代码只能内部使用。在第一种情况下,项目仅作为想法存在;在第二种情况下,项目可能已经作为一个内部项目开始,并且还没有被公开。 +* 可能这个想法已经与社区分享来获得反馈。然而,要注意的是,分享这样仅在公司内部讨论过的想法,需要事先获得批准。 -This is the starting point of every open source project. It can also be referred to as the “initiation phase”. Normally, at this stage, only an idea exists or a specific problem has been identified which requires solution. In this phase, the open source project typically has the following characteristics: +在启动一个项目之前,合理的做法是获得以下关键问题的答案: -* The problem that the project intends to solve has been clearly defined -* There is either no source code available yet or the source code is only internally available. In the first case, the project only exists as idea; in the second case, the project may have been started as an company-internal project and has not been published yet -* Possibly, the idea has been already shared with the community to get feedback. However, note that sharing such ideas that have only been discussed company-internally requires approval in advance. +* 是否有可能与现在的开源项目合作? +* 我们能使用开源软件(OSS)模式发起和维护项目吗? +* 成功的要素是什么?我们怎么衡量它? +* 我们能否从财务上资助这个项目?我们是否有一个内部的执行推动者? +* 这个项目是否能够吸引外部企业参与(从一开始)? +* 是否有足够的外在兴趣来形成和壮大开发者社区? -Before starting a project, it is reasonable to get answers to the key questions: +(来源:[Linux 基金会](https://www.linuxfoundation.org/en/resources/open-source-guides/starting-an-open-source-project/)) -* Is it possible to join efforts with an existing open source project? -* Can we launch and maintain the project using the OSS model? -* What constitutes success? How do we measure it? -* Can we financially sponsor the project? Do we have an internal executive champion? -* Will the project be able to attract outside enterprise participation (from the start)? -* Is there enough external interest to form and grow a developer community? +另外,在规划阶段还应考虑以下几个方面: -(Source: [Linux Foundation](https://www.linuxfoundation.org/en/resources/open-source-guides/starting-an-open-source-project/)) +* 项目的目标是什么?它能解决问题吗? +* 是否有足够的资源来启动项目,并在长期内支持该项目的发展?(你还需要获得并确保赞助) +* 必须选择一个合适的许可证。许可证应当支持项目目标。 +* 必须确定贡献的法律要求(例如,贡献者是否必须签署CLA或DCO)。也许你的公司对此有一个标准的做法。 +* 执行额外的检查。例如: -In addition, the following aspects should be considered in the planning phase: + * 确保所有许可义务都被履行 + * 出口管制:在某些环境下,可能要求该项目必须要有一个[出口管制分类编号(ECCN)](https://en.wikipedia.org/wiki/Export_control) + * 检查公开发布是否与现存的商标有冲突。 -* What is the goal of the project and will it solve the problem? -* Are there enough resources not only to start, but to support the project in the long-term? (You also need to obtain and ensure sponsorship) -* An appropriate license must be selected. The license should support the project goal. -* The legal requirements for contributions must be decided (if, for example, contributors must sign a CLA or DCO). Maybe your company has a standard approach for that. -* Execute additional checks. For example: +* [Linux基金会的清单](https://www.linuxfoundation.org/en/resources/open-source-guides/starting-an-open-source-project/#checklist)包含了一系列您可能需要考虑的全面主题: +* 将代码捐赠给中立的,非营利性组织(即开源基金会)是否有意义,或者由贵公司拥有和运行项目并保留一定控制权?请注意,这个决定取决于项目,也可能在项目生命周期的后期再做决定。通常,项目需要先发布并引起社区的兴趣,然后才能移交给第三方组织。 +* 设立开源项目治理结构。它规定了如何贡献或维护项目。 +* 确定项目成员们将使用的工具和基础设施。 +* 进行技术审查。 + * 在公开发布之前,确保删除所有关键内容。例如: + * 对非公开组件的依赖 + * 内部评论,对其他内部代码的引用等。 + * 访问令牌等。 - * Make sure that all license obligations are fulfilled - * Export control: Under certain circumstances it might be required that the project must have an [export control classification number (ECCN)](https://en.wikipedia.org/wiki/Export_control), for example. - * Check that the publication is not in conflict with existing trademarks. + * 确保编码风格的一致性 -* The [checklist of the Linux Foundation](https://www.linuxfoundation.org/en/resources/open-source-guides/starting-an-open-source-project/#checklist) contains a comprehensive set of topics you might want to consider -* Does it make sense to donate the code to a vendor-neutral, non-profit organization (that is, an open source foundation), or retain some control by owning and running the project under the responsibility of your company? Note that this decision depends on the project and may also be taken later in the life cycle. Typically, a project first needs to be published and generate interest in the community before it is handed over to a third-party organization. -* Set up an open source project governance. It establishes how to contribute to or maintain a project. -* Determine the tools and infrastructure the project members will use -* Carry out a technical review +* 代码将在哪里发布?通常情况下,代码会发布在公司拥有的组织内,并使用诸如 GitHub.com 或 GitLab.com 的代码托管平台进行托管。但是,根据具体的技术类型,也存在其他潜在的发布渠道(例如 NPM、Maven 中央仓库、PyPI)。 +* 发布二进制文件是否有意义?如果有,发布在哪里? +* 确定你的网站地址和沟通方式:您如何使你的项目广为人知?为项目创建一个网站是否意义?是否有工作组? +* 规划你的项目生命周期。 - * Ensure that all critical content is removed from the project before publishing it. For example: +### 活跃或开发阶段 - * Dependencies to non-public components - * Internal comments, references to other internal code, and the like - * Access tokens and the like +项目一旦获得开源批准,并且代码已经发布可用,项目就进入了活跃开发阶段。在这个阶段,开源项目通常具有以下特点: - * Ensure that the coding style is consistent +* 源代码公开可见 +* 项目社区积极管理 +* 项目能够收到来自社区的贡献。 +* 基于新收到的需求,进一步的开发在进行中。 +* 一个专门团队正在负责这个项目,并提供支持。 +* 为使得项目有更好的知名度以及吸引更多的用户和贡献者,项目正在通过开园活动、会议讲座进行推广。 -* Where will the code be published? Typically, it will be in a company-owned organization on a code hosting platform such as GitHub.com or GitLab.com but, depending on the technology, other potential publishing channels exist (for example, NPM, Maven central, PyPI) -* Does it make sense to publish binaries? If yes, where? -* Define your web site and communication: What can you do to make your project known? Does it make sense to create a web site for the project? Are there working groups? -* Plan your project life cycle +在活跃阶段,应当考虑以下方面: -### Active or Development Phase +* 进行市场营销:提高项目知名度(例如通过博客文章、接触潜在感兴趣的团体/公司、参加会议演讲等方式) +* 投资于社区的建设和管理 +* 秉持完全透明的原则,即使目前没有外部社区,每个决策也应该公开进行。这样做非常重要,因为感兴趣的组织能够追踪所有决策,并逐步建立对项目的信任。 +* 执行项目及社区的健康检查(即审查已定义的 KPI 和目标) +* 检查第三方贡献 +* 规划进一步发展 +* 通过修复漏洞和安全问题提供支持 -Once the project has got an approval for open sourcing and the code is available and published, the project has entered the active development phase. In this phase, the open source project typically has the following characteristics: +### 成熟或者维护阶段 -* The source code is publicly visible -* The project community is actively managed -* The project can receive contributions from the community -* Further development is ongoing, based on incoming requirements -* A dedicated team is working on the project and provides support -* Potentially, to make the project better known and to attract more users and contributors, the project is being promoted in talks at open source events, conferences, and so on. +在某个时间点,开源项目变得成熟。这也可以称为“维护阶段”,意味着只进行错误修正,通常不再开发新功能。以下是这个阶段的特点: -During the active phase, the following aspects should be considered: +* 该项目正在被活跃使用,但是从功能角度看,它可以被认为是完整的,或者至少不再需要重大的功能增强。 +* 贡献主要专注于漏洞修复。功能增强只是次要,而且很少进行。 +* 一个专门的团队仍然为项目提供支持,但投入的精力相对较少。 +* 团队仍然需要照顾社区,但与活跃开发阶段相比,通常需要更少的精力。 +* 明确告知项目进入维护阶段,且不再进行或仅进行有限的进一步开发,是一种好的做法。 +* 团队应当定期对开源项目和外部社区进行定期检查。 +* 漏洞修复和安全修复仍然是必需的。 -* Do marketing: Make the project better known (for example through blog posts, reaching out to potentially interesting parties/companies, talks at conferences) -* Invest in building and managing the community -* Care for full transparency, every decision shall be made in the public, even if there is no external community yet. This is very important because interested organizations are able to follow all decisions and to build up trust in the project -* Carry out a health check of the project and its community (that is, perform a review of the defined KPI’s and goals) -* Check 3rd party contributions -* Plan further developments -* Support by fixing bugs and security issues +### 废弃或者生命周期结束阶段 -### Mature or Maintenance Phase +开源项目处在这个阶段具备以下特征: -At a certain point in time, an open source project becomes mature. This can also be referred to as the "maintenance phase", meaning that only error corrections are made and normally no new functionality is developed. The following aspects characterize this phase: +* 对项目没有或仅有很小的兴趣 +* 不再接受任何贡献 +* 不再进行任何开发和新的需求 +* 没有提供任何支持。 +* 可能已经不再有项目团队可用。 -* The project is being used actively, but from a functional perspective it can be considered as complete or at least no major functional enhancements are necessary -* Contributions mainly focus on bug fixes. Functional enhancements are only minor and are done rarely -* A dedicated team still provides support for the project, but with relatively low efforts -* The team still has to take care of the community, but normally less effort is required compared to projects that are in active development. -* It is good practice to clearly communicate that the project is in the maintenance phase and no or only limited further development can be expected -* The team should perform regular health checks of the open source project and the external community -* Bug fixes and security fixes are still required +当选择许可证时,以下的问题需要考虑: -### Obsolete or End of Life Phase +* **开源项目的目标是什么?** 当广泛采用是首要任务时,宽松的许可证是一个不错的选择;而当重点在于建立贡献者社区时,更护会的许可证可能更有优势。 +* **项目所处的生态系统是否有建议或者要求的许可证?** 如果项目旨在成为某个基金会或者项目的一部分,那么可能会强烈倾向于选择某种特定的许可证,例如 Apache 项目采用 Apache 许可证,Linux 内核驱动程序采用 GPL。 +* **许可证如何与您的商业模式相互作用?** 当您打算开源的软件支撑您业务的其他部分时,宽松许可证可能会加速其被采纳。如果您还在销售软件的专有版本,那么 copyleft 许可证可能会成为更强大的差异化因素。 +* **是否存在限制许可证选择的依赖项或其他合并的代码?** 例如,当合并GPL代码时,目标项目也必须采用GPL许可证。 -An open source project in this phase is characterized by the following properties: +回答这些问题可能具有挑战,并且观点会因人而异。一个简单的起点可以是使用[choosealicense.com](https://choosealicense.com/)这个网站。此外,从各种来源都可以找到大量综合材料,例如[Open source licenses: What, which, and why](https://arstechnica.com/gadgets/2020/02/how-to-choose-an-open-source-license/)(开源许可证:是什么、选哪种以及为什么)。 -* There is no or only very minor interest in the project -* No further contributions take place -* There are no further developments and no incoming requirements -* No further support takes place -* Possibly, there is no project team available anymore +建议制定许可证选择策略,以便在启动新项目时简化决策过程。 -During this phase, it is important to consider the legal implications and come up with the appropriate documentation and communication with the community. Since the project has been published, it might be in use. Therefore, the community needs to be informed that the project is no longer maintained. Furthermore, once in this phase the decision must be made whether to archive the project or remove it completely. +### 贡献者许可证协议(CLA),开发者原创证书 (DCO) -## Legal and governance considerations +当运营一个开源向目时,你需要决定如何检查代码的来源,以及是否需要从贡献者那里获取许可证未授予的额外权利。主要有三种方式来处理这些问题: -### Which license to select +* **“Inbound=Outbound”**——项目接受贡献时,采用与项目发布代码相同的许可证。这意味着不需要额外的文书工作。这是一种对称的设置,其中贡献者、维护者和用户在所选许可证下享有相同的权利。对贡献者来说,门槛最低。然而,有些事情(比如更改项目的许可证)会变得困难,因为这需要得到每位贡献者的批准。 -Choosing the license for a new open source project is an important decision. Without a license the code can't be used by anybody, even if the code is publicly available, for example in a GitHub repository. Choosing a license which is not approved by the OSI as an open source license also effectively makes the code proprietary. This will make it harder to get adoption, especially in most corporate setups, where processes are usually built around the well-known standard open source licenses. +* **开发者原创证书(DCO)**—— DCO 最早用于 Linux 内核开发,现已被许多其他项目采用。它是一种开发者通过在提交信息中包含“Signed-off-by”声明来提供的声明。通过这个声明,开发者明确表示他们拥有进行贡献所需的权利,并同意项目使用其贡献。这种方式的门槛仍然较低,但它使项目对代码的合法贡献更加放心。然而,在需要更改代码许可证的情况下,它并不起作用。 -Open source licenses vary in the rights and the obligations they give to users. All open source licenses approved by OSI give users the right to use the software without restriction to specific users or use cases. When distributing open source software, and especially when distributing it with modifications, the obligation vary. The spectrum goes from the so-called copyleft licenses such as the GPL, which require to pass on rights given by the license to users, to permissive licenses, such as the Apache or the MIT license, which allow incorporation in proprietary systems. +* **贡献者许可协议(CLA)**—— CLA 是一份贡献者与项目之间的附加协议,它为项目提供了除许可则所授权之外的额外权利。如果人员代表公司贡献代码,而公司享有贡献者的工作成果的权利,那么该公司必须签署 CLA。目前存在多种不同的 CLA,有些主要确认许可证已经赋予的权利,有些提供额外的权利,例如能够以不同的许可证发布代码,例如当代码作为商业产品的一部分也以专有许可证发布时。通过 CLA,权利被集中到中心位置,因此可以更改许可证,或者将代码作为具有不同许可证产品的一部分重新发布。该协议的不对称性赋予项目方比其贡献者更多的权利,这可能会对贡献造成更大的障碍。要求公司签署 CLA 也可能成为一个不可逾越的障碍,尤其是对大型公司而言,因为检查和签署 CLA 所需的工作量和法律影响可能超过贡献的收益。 -When choosing a license the following questions have to be considered: +你应当制定一个策略,明确在何种情况下使用哪种方式。“Inbound=Outbound”是一种务实的方法,适用于大多数项目。DCO 是一种使贡献过程更加明确的好方法,尤其适用于具有众多贡献者的较大项目。CLA 使得贡献变得更加困难,并且需要额外的管理工作和工具。要了解大型企业面临的额外工作量和困难的详细信息,您可以查看关于[向现有项目贡献](https://todogroup.org/zh-cn/resources/guides/a-guide-to-outbound-open-source-software/#process-for-expressing-company-approval-for-contributions)的部分。 -* **What's the goal of the open source project?** When broad adoption is a priority, a permissive license might be a good choice, when the focus is on building a contributor community, more reciprocal licenses might have advantages. -* **Is there a license suggested or required by the ecosystem where the project is positioned?** If it is meant to become part of a foundation or an umbrella project then there might be a strong preference for a license, e.g. the Apache license for Apache projects, or the GPL for Linux kernel drivers. -* **How does the license interact with your business model?** When the software you are going to open source is supporting other parts of your business, a permissive license might accelerate adoption. If you are also selling proprietary version of your software, a copyleft license might be a stronger differentiator. -* **Are there dependencies or other incorporated code which limit the choice of licenses?** For example when incorporating GPL code, the resulting project has to be GPL as well. +### 项目治理 -Answering these questions can be challenging and opinions will vary. A simple starting point can be the [choosealicense.com](https://choosealicense.com/). There is a lot of comprehensive material available from various sources, e.g. [Open source licenses: What, which, and why](https://arstechnica.com/gadgets/2020/02/how-to-choose-an-open-source-license/). +开源项目成功的关键因素之一是其治理结构。这包含了协作的规则、策略、习惯和文化。 它决定了诸如如何做出决策、谁控制项目以及谁可以加入项目等因素。 -It is advisable to set up policies for license selection, so that the decision process is simplified when starting new projects. +在现有项目中,治理通常随着时间的推移而逐渐形成,从由项目创始人的实践所驱动的非正式程序,发展为在贡献指南中更为正式定义的治理结构,或者最终通过一个托管项目的正式组织基金会来制定。 -### Contributor License Agreement (CLA), Developer Certificate of Origin (DCO) +当启动一个新的开源项目时,你应当决定治理结构是什么样的。这不仅仅是选择许可证的问题。你还需要决定商标或域名等资产的所有权,以及它们的使用规则。此外,您还需要决定人员如何成为提交者或维护者、版本发布和路线图的制定方式,以及决策过程的透明度等方面的政策。 -When running an open source project you need to decide how you are going to check code provenance and if you need additional rights from contributors which are not given by the license. There are mainly three ways how to handle that: +对于旨在吸引大量贡献者的项目,重要的是建立一个能够提供中立平台、对不同参与者开放参与并且决策过程透明的治理结构。这可以称为[开放治理](https://opengovernance.dev/)。实现这一目标的一种方法是加入现有的开源基金会之一。杰出的例子包括由 CNCF(云原生计算基金会)托管的 [Kubernetes](https://kubernetes.io/) 项目,以及隶属于 [Eclipse 基金会](https://www.eclipse.org/org/foundation/)的 [Eclipse IDE](https://www.eclipse.org/ide/) 项目。 -* **"Inbound=Outbound"** - Contributions are accepted under the same license as the project distributes its code. There is no additional paperwork. This is a symmetric setup, where contributors, maintainers, and users have the same rights under the chosen license. It has the lowest barrier for contributors. Some things such as changing the license of the projects become difficult, because that needs approval by every contributor. +在其他情况下,公司可能想要保留对项目更多的控制权。这将限制其他人的贡献,但也给了公司更多的自由引导项目发展的方向。这要求分配足够多的资源来维护项目。尽管如此,实施开放治理的某些元素仍然是有帮助的,例如提高项目规划的透明度或实施宽容的商标政策以增加项目的采用率。这方面的例子包括由 Google 运营的 [TensorFlow](https://www.tensorflow.org/) 和由 Microsoft 运营的 [Visual Studio Code](https://code.visualstudio.com/)。 -* **Developer Certificate of Origin (DCO)** - The [DCO](https://developercertificate.org/) was introduced in Linux kernel development and has been adopted by many other projects. It is a statement developers give with each commit by including a "Signed-off-by" statement in the commit message. With this statement developers explicitly declare that they have the rights they need to do the contribution and that they agree that the project is using it. This is still a low barrier, but it gives projects more confidence that code was rightfully contributed. It does not help in cases where the license of the code needs to be changed. +对于规模较小的项目,例如从其他项目工作中衍生出来的技术工具,也可以采用简单且不太正式的治理方式。在这种情况下,主要目标不是广泛采用或建立大型社区,而是保持透明度和与感兴趣的个人进行临时写作。这类项目往往更多地有技术需要和开发者动力驱动,而不是有总体业务需求驱动。如果这样的项目不断发展壮大,其治理方式也可以逐步演进。例如,项目可能会转移到某个基金会。在 [GitHub](https://github.com/explore) 上可以找到无数这样的例子。 -* **Contributor License Agreement (CLA)** - A CLA is an additional agreement between the contributor and the project which gives the project additional rights on top of the rights given by the license. If people contribute on behalf of a company, where the company holds the rights on the work of the contributor, the company has to sign the CLA. There is a variety of different CLAs in use, some mostly confirm the rights already given by the license, some give additional rights such as being able to release the code under a different license, for example when the code is also released under a proprietary license as part of a commercial offering. With a CLA, rights are collected at a central place, so changing the license, or rereleasing the code as part of a product with a different license, is possible. The asymmetry of the agreement, which gives the project more rights than its contributors, can impose a bigger barrier for contributions. Requiring a corporate CLA can also be an insurmountable barrier, especially for large corporations, because the effort and legal implications of checking and signing a CLA might outweigh the benefits of contributing. +您可以从[最小可行治理](https://github.com/github/MVG)框架或[面向开源和自由软件项目的法律问题入门](https://softwarefreedom.org/resources/2008/foss-primer.html)找到有关开源项目治理的更详细信息和可能的入门指南。 -You should have a policy for which of these ways you use when. "Inbound=Outbound" is a pragmatic way which can work for most projects. The DCO is a good way to make the contribution process more explicit, especially for larger projects with diverse contributors. The CLA makes contributions more difficult and requires additional administrational work and tooling. To get an impression about the additional effort and difficulties especially large corporations face you can check the section about [contributions to existing projects](#process-for-expressing-company-approval-for-contributions). +### 不同的项目级别 -### Project governance +对新开源项目设置不同的级别(“沙箱”,“孵化器”,“毕业”)是有意义的。 例如[CNCF 的项目级别](https://www.cncf.io/projects/)就是这样划分的。这是一种根据采纳度、成熟度和质量标准对项目进行分类的方法。基本思路是,新项目在一个专用空间内开始(CNCF 称之为“沙箱”,在 Meta 则为“孵化器”项目,如 [“Incubator”](https://github.com/facebookincubator))。在这个空间里,项目可以不断发展,并检查是否达到了在采纳和质量方面设定的目标。如果达到了,项目就可以晋升到下一个级别;如果没有,则可能会决定停止项目。这种分级制度有助于确保项目的质量和可持续性,同时也为项目提供了成长和发展的空间。 -An important factor for the success of an open source project is its governance. That comprises the rules, policies, conventions, and culture of the collaboration. It determines factors such as how decisions are taken, who is in control, or who can join a project. +## 社区管理 -In existing projects governance often has emerged over time, has gone from informal procedures driven by the practices of the project founders to more formally defined governance documented in contribution guides or ultimately instituted through a foundation as formal organization hosting the project. +对于大部分开源项目,围绕项目建立社区并接收贡献是一个重要目标,甚至可以说是首要目标(不过也有一些项目开源的主要目的并不是建立活跃的社区,例如通过公开源代码来建立信任,在这种情况下,获得贡献的优先级可能会较低)。这样的社区并不是自然而然形成的。启动和维持它需要计划、预算和资源。初始和持续的活动包括: -When starting a new open source project you have to decide about how its governance will look like. This goes beyond deciding on a license. You will also have to decide about ownership of assets such as trademarks or domains and the rules how they can be used. And you will have to decide about policies of how people can become committers or maintainers, how releases and roadmaps are made, or how transparent the decision making process is. +* 宣传项目 -For a project which is meant to attract a broad set of contributors it is important to set up governance which provides a neutral ground, is open to participation by diverse participants, and is transparent about its decision making. This can be called [open governance](https://opengovernance.dev/). One way to achieve this is to join one of the existing open source foundations. Prominent examples for this are [Kubernetes](https://kubernetes.io/) which is hosted by the [CNCF](https://www.cncf.io/) or the [Eclipse IDE](https://www.eclipse.org/ide/) which is part of the [Eclipse Foundation](https://www.eclipse.org/org/foundation/). + 这包括在会议上发言,主办或赞助关键活动,以及在您的社区中建立新的倡议和计划。 -In other cases a company might want to retain more control about the project. This will limit contributions from others but give more freedom in how to steer a project. It requires that there are enough resources allocated to maintain the project. It still is helpful to implement elements of open governance, such as transparency about planning or a permissive trademark policy to increase adoption of the project. Examples for this would be [TensorFlow](https://www.tensorflow.org/) which is run by Google or [Visual Studio Code](https://code.visualstudio.com/) which is run by Microsoft. +* 创建一个温馨的环境 -For smaller projects, for example technical tools which emerge from work on other projects, a simple and less formal approach to governance can also work. Here the goal is not primarily broad adoption or building a large community, but transparency and ad-hoc collaboration with interested individuals. Often this kind of project is more driven by technical needs and motivation of developers than by overarching business needs. If such a project is growing its governance can be evolved. This can for example result in a project being transferred to a foundation. Countless examples can be found on [GitHub](https://github.com/explore). + 这包括创建开源项目政策,指南(面向维护者的基本指南,安装流程,最终用户使用指南)或改善主要的项目交流渠道(论坛、聊天讨论等) -More detailed information and possible starting points for open source governance can be found in the [Minimum Viable Governance](https://github.com/github/MVG) framework or [A Legal Issues Primer for Open Source and Free Software Projects](https://softwarefreedom.org/resources/2008/foss-primer.html). +* 促进协作 -### Different Project Levels + 建立指导程序,增加项目文档(例如如何贡献、如何编写和运行测试、如何选举管理委员会等) -It can make sense to have different levels for new open source projects ("sandbox", "incubator", "graduated" - these are the different [project levels of CNCF](https://www.cncf.io/projects/), for example). This is a way to classify your open source projects wrt. adoption, maturity and quality criteria that they have to fulfill. The basic idea is that new projects start in a dedicated space (CNCF calls that "sandbox" - at Meta, that's the ["Incubator"](https://github.com/facebookincubator)). In this space, projects can evolve and check if they reach the goals that have been defined in terms of adoption and quality. If they do, they can be promoted to the next level. If they don't, it might be decided to sunset them. +建议为项目分配一名社区经理,负责这些任务。TODO Group 指南[启动开源项目](https://todogroup.org/guides/starting/)中“构建社区”的章节包含更多信息。如需进一步阅读,我们推荐 TODO Group 指南中的“[构建包容性开源社区](https://todogroup.org/guides/diversity-inclusion/)”和“[在开源社区中培养领导力](https://todogroup.org/guides/building-leadership/)”。 -## Community management +### 行为准则 -For the majority of open source projects, starting a community around that project and receiving contributions is an important if not the primary goal (however, there are also projects where the primary goal for open sourcing is not the creation of a vivid community - for example building trust by making the source code visible, in this case receiving contributions might have a lower priority). Such a community does not take off by itself. Starting it and keeping it alive requires planning as well as budget and resources. Initial and ongoing activities comprise: +营造一个安全友好的环境,让人员免受他人有害行为的侵害,是维护健康社区的重要组成部分。尤其重要的是支持多元化的社区,避免对少数群体的歧视,解决显性和隐性的偏见问题。 -* Promote the project +维护健康社区环境的一个常见要素是行为准则,它明确规定了可接受和不可接受的行为规则,并定义如何处理不可接受的行为。有许多示例和模板可以作为您行为准则的基础。一个广受欢迎的、可重复使用的行为准则是[贡献者公约 (Contributor Covenant)](https://www.contributor-covenant.org/),它被诸如 Kubernetes、git、Node.js 等许多项目所采用。 - This includes presenting at conferences, hosting or sponsor key events, and building new initiatives and programs in your community +作为一家公司,你需要提供一个用于举报违反行为准则情况的电子邮件地址。您需要确保该地址由能够及时响应、具备处理此类问题的能力的人员负责控制。 -* Create a welcoming environment +## 技术考量、工具与最佳实践 - This includes creating open-source project policies, guidelines (basic instructions for maintainers, installation process, instructions for end users) or improve main project communication channels (forums, chat discussions, etc) +合适的工具能够节约大量时间,并显著帮助自动化流程。[开源项目管理工具精选列表](https://github.com/todogroup/awesome-ospo)包含了经过验证和推荐的工具的综合列表。 -* Facilitate collaboration +### 用户管理 - Building mentoring programs, adding project documentation (such as how to contribute, how to write and run tests, how the governing board is elected, etc ) +通常,Git 提供商(GitHub、GitLab、Bitbucket 等)提供定义由单个用户组成的团队以及设置团队和个人级别(访问)权限的方法。为了使用 Git 提供商的服务,工程师需创建相应的账户。此账号与工程师在公司的内部账户无关。这会带来一些挑战,因为工程师对外部仓库的访问权限可能依赖于他们在公司内的角色或者他们是否仍然在公司工作(假设工程师在为贵公司工作期间获得外部仓库的全面权限,而现在他们已经离职——您可能想要调整访问权限)。但是如何做到这一点,因为工程师在 Git 提供商的外部账户独立于其公司内部用户账户?需要某种方式在两个账号之间建立映射。对于 GitHub,可以使用开源工具 [opensource-portal](https://github.com/microsoft/opensource-portal) 来帮助创建这样的映射。它还可用于实现加入 GitHub 组织的自助服务。作为该过程的一部分,该工具会建立了 GitHub.com 账号与其对应公司内部用户账号之间的映射。映射存储在数据库中。在此基础上,可以轻松创建一些工具,定期检查数据库中包含的所有用户是否仍在贵公司任职,并在情况不成立时出发某些活动。 -It's advisable to assign a community manager to the project who takes care of these tasks. The TODO Group Guide [Starting an open source project](https://todogroup.org/guides/starting/) contains more information in its chapter "Build the community". For further reading, we recommend the TODO Group Guides [Building an inclusive open source community](https://todogroup.org/guides/diversity-inclusion/) and [Building leadership in an open source community](https://todogroup.org/guides/building-leadership/). +### 设置仓库 -### Code of conduct - -Creating a welcoming environment where people are safe from harmful behavior by others is an important part of maintaining a healthy community. It is especially important to support a diverse community, where there is no discrimination of under-represented groups, and explicit or implicit bias gets addressed. - -A common element in maintaining a healthy community environment is a code of conduct which makes rules for accepted and unaccepted behavior explicit and defines how unacceptable behavior is dealt with. There are examples and templates which can be used as a base for your code of conduct. One popular reusable code of conduct is the [Contributor Covenant](https://www.contributor-covenant.org/) which is used by projects such as Kubernetes, git, Node.js, and many more. - -As a company you need to provide a contact email which can be used to report code of conduct violations. You need to make sure that this address is monitored by people who can react in a timely manner and have the competence and ability to initiate adequate actions to address these issues. - -## Technical considerations, tooling and best practices - -Appropriate tooling can safe a lot of time and help to automate processes significantly. [Curated list of awesome tools to manage open source](https://github.com/todogroup/awesome-ospo) contains a comprehensive list of proven and recommendable tools. - -### User management - -Normally, Git providers (GitHub, GitLab, Bitbucket etc.) offer means to define teams of individual users and to define (access) rights on team and on individual level. To be able to use the service of a Git provider, engineers have to create a corresponding account. This account has nothing to do with the company-internal account of an engineer. This imposes some challenges since the access rights of an engineer for an external repository might depend on their role in the company or whether they are still working for the company (let's assume that an engineer got comprehensive rights for external repositories when they were working for your company and that they now left the company - you might want to adjust the access rights). But how to do that since the external account of an engineer at a Git provider is independent from his company-internal user account? Somehow a mapping between both accounts is needed. For GitHub there's the open source tool [opensource-portal](https://github.com/microsoft/opensource-portal) available that can help to create such a mapping. It can also be used to implement a self service for joining of GitHub organizations. As part of the process, the tool creates the mapping between the GitHub.com account and the corresponding company-internal user account. The mapping is stored in a database. Based on this, it is easy to create some tooling that regularly checks if all users that are contained in that database are still employed by your company and trigger some activity if that's not the case. - -### Setting up a repository - -It is good practice that a repository contains a certain set of files (the *health files*). These files contain the basic information about the repository such as description, code of conduct, license, contribution guidelines etc. These files are often provided in [markdown format](https://en.wikipedia.org/wiki/Markdown), but could - depending on the Git provider - be provided in different formats such as [AsciiDoc](https://en.wikipedia.org/wiki/AsciiDoc). Here, we assume the default format (which is markdown) and thus use the file suffix `.md`. +在代码仓库包含一定的文件集合(健康文件)是一个良好的做法。这些文件包含仓库的基本信息,例如描述、行为规范、许可证、贡献指南等。这些文件通常以 [markdown 格式](https://en.wikipedia.org/wiki/Markdown),但根据Git提供商的不同,也可以采用其他格式,例如 [AsciiDoc](https://en.wikipedia.org/wiki/AsciiDoc)。在这里,我们假设默认格式为 markdown,因此使用文件后缀名`.md`. * *README.md* - This file is displayed as the *homepage* of the repository. It typically contains information such as repository description, dependencies as well as download, installation and configuration instructions. + 此文件作为仓库的“主页”展示。它通常包含关于仓库的描述、依赖项以及下载、安装和配置说明等信息。 -* *LICENSE* or *LICENSE.txt* - - Contains the license text for the repository. +* *LICENSE* 或 *LICENSE.txt* + 包含仓库的许可证文本。 * *CONTRIBUTING.md* - - Contains information and instruction about how contributions can be made. + 包含关于如何做出贡献的信息和说明。 * *CODE-OF-CONDUCT.md* - - Contains the code of conduct for the repository. + 包含仓库的行为准则。 * *GOVERNANCE.md* - Contains information about project governance. + 包含关于项目治理的信息。 * *SECURITY.md* - Contains instructions about how to report security vulnerabilities for the repository. + 包含关于如何报告仓库安全漏洞的说明。 * *SUPPORT.md* - Contains information about how to receive support in case of problems. + 包含关于在出现问题时如何获得支持的信息。 + +对所有仓库来说,都应当包含 *README.md* 和许可证的文本文件。其余的文件可以被视为可选的,只在需要时才创建(例如,如果不接受任何贡献,则可以将此信息放入 *README.md* 中,这样就不用需要创建 *CONTRIBUTING.md* 文件) -The *README.md* and the license text file should be there for all repositories. The other files can be considered as optional and only be created if they are required (if, for example, no contributions are accepted, this information could be put into the *README.md* and a *CONTRIBUTING.md* is not necessary). +为了确保始终创建某个特定健康文件集,我们可以采用以下几种方法: -To make sure that a certain set of health files is always created, there are different possibilities: +* 一种方法是利用模版仓库。这些仓库包含了所需的一系列初始健康文件。您可以通过从模版仓库/复制一个新的仓库,从而使其包含所需的健康文件集。一些 Git 提供商(例如 Github)提供了[特定手段 (sepecific means)](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file)来帮助您默认创建必须的健康文件。 +* 另一种可能的方法是采用工具创建仓库。这类工具通过 Git 提供商(如 GitHub.com、GitLab.com、Bitbucket.org 等)的 API,基于一些输入数据来创建仓库。因此,它们可以帮助仓库符合公司指南(例如,包含所需健康文件和团队结构)。基于此类工具,可以提供自助服务来创建仓库,使开发团队能够自己创建仓库。通常,公司会根据自己的特定需求开发此类工具。我们(文档的作者们)不了解通用的仓库创建工具。 -* One possibility is to use template repositories. These are repositories that contain the required set of initial health files. A new repository can be created/copied from this template repository and thus it contains already the required set of health files. Some Git providers (GitHub, for example) provide [specific means](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file) to create the required health files per default. +### 提供许可证和版权信息 -* Another possibility is to create repositories with a tool. Such tools create repositories based on some input data via the API's of the Git provider (GitHub.com, GitLab.com, Bitbucket.org etc.). Thus, they can help that repositories are compliant to the company guidelines (contain the required health files **and** team structure, for example). Based on such tools self services for repository creation could be offered that allow development teams creating repositories themselves. Often, companies develop such tools for their specific needs. We (the authors of this document) do not know generic repository creation tools. +开源软件项目的许可证和版权信息必须正确的声明。这对于项目的使用者和贡献者都是非常重要的。此外,源代码经常从一个项目复制到另一个项目,因此,强制所有文件都必须携带许可证和版权信息是必不可少的。 -### Providing license and copyright information +* 对于项目中由您和您公司开发的部分 +* 以及作为您仓库一部分的外部组件(即外部方开发的代码)。 -License and copyright information must be declared properly for an open source project. This is important for consumers of the project as well as for contributors. Furthermore source code often gets copied from one project to another, this makes it mandatory that all files carry license and copyright information +请注意,像*有关许可条件,请查看 LICENSE.txt* 这样的声明是不合适的。 -* for the parts of the project that you / your company developed -* but also for external components (i.e. code developed by external parties) that are part of your repositories +来自[欧洲自由软件基金会 (Free Software Foundation Europe)](https://fsfe.org/)的 [REUSE 工具](https://reuse.software/)支持您项目的许可和版权信息的正确声明: -Note that a statement like *For license conditions please check LICENSE.txt* is not suited. +* 它为许可证和版权信息提供了一个机器可读的文件格式,从而使其他人(例如扫描工具)可以轻松地提取这些信息。 +* 它提供了工具用于: + * 在源代码文件中添加许可和版权信息 + * 下载和存储许可文本 + * 对您的仓库进行代码审查,以确保所有文件都包含了许可和版权信息。 -The [REUSE tool](https://reuse.software/) from the [Free Software Foundation Europe](https://fsfe.org/) supports the proper declaration of license and copyright information for your project: +### CLA/DCO 管理 -* It provides a machine-readable file format for license and copyright information and thus makes it easy for others (scanning tools, for example) to consume that information -* It provides tooling to: - * add license and copyright information to source code files - * download and store license texts - * to lint your repositories to make sure that license and copyright information is available for all files +如果贡献者在可以提交贡献代码之前,必须要接受 CLA 或者 DCO,那么尽可能的自动化该过程是有益的。[TODO Group](https://todogroup.org/) 提供了一份[工具列表](https://github.com/todogroup/awesome-ospo#contributor-license-agreements--developer-certificate-of-originis),支持 DCOs 或 CLA 文档的管理和签署。作为例子,我们将更详细地描述 [CLA Assistant](https://github.com/cla-assistant/cla-assistant)。 -### CLA/DCO Management +CLA 助手 (CLA Assistant)实现了一个工作流程,要求贡献者在向 GitHub.com 上的特定仓库提交首个拉取请求时接受/签署一份文档。尽管该工具的名称为 “CLA 助手”,但它可以用于公司要求贡献者在提交拉取之前接受的任何类型的文档,包括 CLA 和 DCO。文档文本必须作为 GitHub.com 上的 gist 提供。要使用的文档/gist 可以在组织和仓库级别进行配置。CLA 助手使用默认逻辑:如果某个代码仓库没有配置特定文档,则会使用组织级别配置的文档。当贡献者首次向仓库提交拉取请求时,CLA 助手会显示文档文本,并且只有贡献者接受该文档内容后才能提交请求。接下来,当统一为贡献者提交拉取请求,他们可以直接提交,无需再次接受该文档。贡献者接受仓库文档的信息会存储在 CLA 助手的数据库中,以后可以检索。CLA 助手可以在[https://cla-assistant.io/](https://cla-assistant.io/)上作为托管服务提供,也可以自行托管。 -If contributors must accept an CLA or DCO before they can submit their contributions, it is beneficial to automate that process as much as possible. The [TODO Group](https://todogroup.org/) provides a [list of tools](https://github.com/todogroup/awesome-ospo#contributor-license-agreements--developer-certificate-of-originis) that support the management and the sign-off of DCOs or CLA documents. As an example, we describe the [CLA Assistant](https://github.com/cla-assistant/cla-assistant) in more detail. +### 凭据扫描 -The CLA Assistant implements a workflow that asks contributors to accept/sign-off a document when a contributor submit the first pull request to a certain repository on GitHub.com. Despite the name of the tool ("CLA Assistant"), it can be used for any type of document that companies require contributors to accept before a pull request can be submitted, including CLAs and DCOs. The document text must be provided as gist on GitHub.com. Which document/gist to be used can be configured on organization and on repository level. The CLA Assistant uses a default logic: If for a certain repository no specific document is configured, the document that is configured on organization level is used. When a contributor submits a pull request for a repository for the first time, the CLA Assistant displays the document text and the contributor can only submit the request if they accept the document. The next time, the same contributor submits a pull request, they can do so without having to accept the document again. The information that the contributor accepted the document for that repository is stored in the database of the CLA Assistant and can be retrieved later on. The CLA Assistant is available as hosted offering on https://cla-assistant.io/ or can be self-hosted. +尽管开源政策和指南明确的要求,在公开代码之前必须移除密码、访问令牌或者其他敏感信息,但有时还是会无意中将此类重要和敏感数据推送到公共仓库。为了尽快发现此类情况(从而能够撤销已发布的敏感信息并从公共仓库中删除该数据),建议定期对此类仓库进行凭据扫描。幸运的是,所有知名的代码托管平台(如 GitHub.com、GitLab.com 等)都提供此类扫描服务作为其服务的一部分。我们强烈建议使用这些服务。 -### Credential scanning +### 质量标准/CII最佳实践徽章计划 -Even if open source policies and guidelines explicitly require that credentials such as password, access tokens or other secrets have to be removed from code before it is published, it happens from time to time that unintentionally such important and sensitive data is pushed to public repositories. To detect such situations as quickly as possible (and thus to be able to revoke the published secret and remove that data from public repositories), it is advisable to regularly execute credential scans for such repositories. Luckily, all well-known code hosting platforms (GitHub.com, GitLab.com etc.) provide such scanning services as part of their offering. We strongly recommend to use that services. +[核心基础设施倡议](https://www.coreinfrastructure.org/)(CII)创立了[CII 最佳实践徽章计划](https://bestpractices.coreinfrastructure.org/en),该计划现在由[开源安全基金会](https://openssf.org/)继续推进。作为该计划的一部分,它定义了开源软件的最佳实践,并实施了徽章系统。项目可以通过[网络应用程序](https://bestpractices.coreinfrastructure.org/en/projects)自我认证是否符合标准,并在其网站上展示相应的徽章。截至今天(2022 年 5 月),已有超过 4724 个项目完成了评估。 -### Quality criteria / CII Best Practices Badge Program +CII 系统分为三个等级(*通过*、*银级* 和 *金级* )。这些等级是层层递进的(即 *银级*包含了*通过*等级的所有标准以及额外的标准)。这些标准被划分为不同的类别,包括*基础*、*变更控制*、*报告*、*质量*、*安全*和*分析*。 -The [Core Infrastructure Initiative](https://www.coreinfrastructure.org/) (CII) created the [CII Best Practices Badge Program](https://bestpractices.coreinfrastructure.org/en). It is now continued by the [Open Source Security Foundation](https://openssf.org/). As part of the program, best practices for open source software is defined and a badge system is implemented. Via a [web app](https://bestpractices.coreinfrastructure.org/en/projects), projects can self-certify that they meet the criteria and show a corresponding badge on their website. As of today (May 2022), more than 4724 projects did the assessment. +CII 最佳实践徽章社区[开放贡献](https://github.com/coreinfrastructure/best-practices-badge/blob/main/CONTRIBUTING.md)(例如,提出额外的标准)。 -The CII system consists of three levels (*Passing*, *Silver* and *Gold*). They are building on each other (i.e. the *Silver* level contains all criteria of the *Passing* level plus additional ones). The criteria are structured in clusters such as *Basics*, *Change Control*, *Reporting*, *Quality*, *Security* and *Analytics*. +总体而言,CII 最佳实践徽章计划是验证项目是否遵循公认最佳实践的一种好方法。通过徽章,项目可以证明其符合这些标准。 -The CII Best Practices Badge community is [open for contributions](https://github.com/coreinfrastructure/best-practices-badge/blob/main/CONTRIBUTING.md) (additional criteria, for example). +### 代码仓库审查 -Overall, the CII Best Practices Badge Program is a good means to verify own projects against commonly accepted best practices. Via the badge, projects can document that they meet these criteria. +代码仓库审查器是一种自动化工具,用来检查代码仓库是否遵循公司为其公开开源仓库定义的指南。[TODO Group](https://todogroup.org/) 提供了可用于此目的[工具列表](https://github.com/todogroup/awesome-ospo#project-quality)。代码仓库审查器通常会检查以下方面的标准: -### Repository Linting +* 仓库中是否存在必需的文件(例如 许可证文件README.md,CONTRIBUTING.md)? +* 这些文件是否包含必需的部分? +* 代码仓库是否具有符合公司指南的许可证? +* 代码仓库是否具有符合公司指南的许可证? +* 代码仓库是否包含必须的徽章(例如 REUSE 徽章或 CII 徽章)? +* 代码仓库团队结构(可能需要特定的团队结构,例如至少两个管理员) +* 代码仓库配置(例如,是否启用了漏洞警报?) -Repository linters are tools that check in an automated way if repositories adhere to the guidelines that a company has defined for its public open source repositories. The [TODO Group](https://todogroup.org/) provides a [list of tools](https://github.com/todogroup/awesome-ospo#project-quality) that can be used for this purpose. Typically, repository linters check criteria such as: +然而,它们检查的标准因公司而异,因此,它们通常提供配置规则的可能性(例如,作为 JSON 文件,正如 TODO Group 的 [repolinter](https://github.com/todogroup/repolinter)所做的那样)。为了获取执行这些检查所需的数据,会使用 Git 提供商(如 GitHub.com、GitLab.com、Bitbucket.org 等)的 API。检查结果通常会在用户界面上提供。如果检查失败,另一种选择是在相应的仓库中自动创建问题。此类审查器的典型使用场景包括: -* Do the required files exist in the repository (license file README.md, CONTRIBUTING.md, for example)? -* Do these files contain the required sections? -* Does the repository have a license that is compliant to the company guidelines? -* Does the repository contain the required badges (the REUSE badge or the CII badge, for example)? -* Repository team structure (a certain team structure might be required - at least two administrators, for example) -* Configuration of the repository (are vulnerability alerts activated?, for example) +* 在代码仓库公开前,检查是否符合指南要求 +* 公开后的常规检查 -However, which criteria they check is company-specific and thus, they normally provide the possibility to configure rules (as JSON file, for example, as the [repolinter of the TODO Group](https://github.com/todogroup/repolinter) does). To retrieve the necessary data to execute these checks, the APIs of the Git provider (GitHub.com, GitLab.com, Bitbucket.org etc.) is used. The result of the check is typically provided in a UI. Another option is to automatically create issues in the corresponding repository if checks fail. Typical usage scenarios for such a linter include: +## 在发布开源项目时构建开源指标策略 -* Check for guideline compliance before a repository is published -* Regular checks after publication +一旦为公司对外开源计划制定了目标,流程和工具,随着公司参与的开源项目不断发展和成熟,持续监测和追踪这些项目的整体健康状况变得非常重要。 -## Build an open source metrics strategy when releasing to open source projects +在考虑使用哪些巩工具来追踪项目的健康状况之前,一个更好地替代方案是遵循目标——问题——指标(goal-question-metrics)方法来建立完整的指标策略。这种方法常用于关注社区健康分析指标标准和软件的社区,例如 Linux 基金会旗下的 [CHAOSS](https://chaoss.community/) 项目。 -Once you have established the goals, procedures, and tools for your company's outbound open source plan, it is always useful to monitor and track the overall health of open source projects the company engages with as they grow and mature. +**定义社区健康目标** -Before thinking about which tool should be used to track project health, a good alternative on how to do this is to establish a full metrics strategy following the goal-question-metrics approach. This approach is used in communities focused on community health analytics metrics standards and software, such as [CHAOSS](https://chaoss.community), one of the projects under the Linux Foundation umbrella. +有时候,最好从小处着手,先定义两个或三个主要目标,避免被指标淹没。如果你不知道从哪里开始,CHAOSS 提供了一套基于不同关注领域和目标的项目健康衡量指标,可以帮助您开始衡量对您组织至关重要的开源项目的健康状况: -**Defining community health goals** +* 常用指标 +* 多样性和包容性 +* 演进 +* 风险 +* 价值 +* 应用生态系统 -Sometimes it is better to start small and define two or three main goals first before getting overwhelmed by metrics. If you don't know where to start, CHAOSS offers a set of metrics based on different focus-areas and goals when measuring project health that can help you get started in measuring the health of the open-source projects that matter to your organization: +**创建问题和构建相关指标** -* Common Metrics -* Diversity and Inclusion -* Evolution -* Risk -* Value -* App Ecosystem +指标应当回答与先前设定的目标相一致的具体问题。 -**Creating questions and building metrics around** +例如,如果你的公司的目标之一是了解项目内的社区足迹,那么一个很好的问题可以是:“在开源生态系统中,组织的存在和影响力如何?”为了解答这个问题,一个有用的指标是“大象因子”,即员工贡献了总贡献量 50% 所需的最少组织数。 -Metrics should be answering specific questions that are aligned with the previous goals established. +有很多优秀的工具可以帮助你度量不同的社区健康分析指标,例如 GrimoireLab、LFX 或 Augur。 -For instance, if one of your company's goals is to understand the community footprint within a project, one good question can be "What’s the presence and influence of organizations within the open source ecosystem?". In order to solve this, one useful metric can be the Elephant Factor (the minimum number of organizations whose employees perform 50% of the total contributions). +如需更多关于跟踪项目健康状况的工具的信息,请查阅 [TODO Guides](https://todogroup.org/guides/management-tools/#tools-for-tracking-project-health) 中的专门部分。 -There are great tools to help you measure different community health analytics metrics, for instance, GrimoireLab, LFX, or Augur. +# 参考文献与缩写 +## 缩写 -For further information about tools for tracking project health, check this dedicated section from one of the [TODO Guides](https://todogroup.org/guides/management-tools/#tools-for-tracking-project-health) +- API = 应用程序编程接口 +- CII = 核心基础设施倡议 +- CLA = 贡献者许可协议 +- CCLA = 企业贡献者许可协议 +- CHAOSS = 社区健康分析开源软件 +- CNCF = 云原生计算基金会 +- DCO = 开发者原创证书 +- ECC = 出口管制与海关 +- ECCN = 出口管制分类编号 +- GPL = GNU 通用公共许可证 +- ICLA = 个人贡献者许可协议 +- IDE = 集成开发环境 +- IP = 知识产权 +- JSON = Java 脚本对象表示法 +- KPI = 关键绩效指标 +- LFX = Linux基金会协作指标 +- MIT = 麻省理工学院 +- NPM = Node 包管理器 +- OSI = 开源促进会 +- OSPO = 开源项目办公室 +- OSS = 开源软件 +- PyPI = Python 包索引 -# References and Abbreviations +## 参考文献 -## Abbreviations +* [开源原型:有目的性开源的框架(Mozilla)](https://blog.mozilla.org/wp-content/uploads/2018/05/MZOTS_OS_Archetypes_report_ext_scr.pdf) +* [如何启动一个开源项目(Linux 基金会 TODO 组)](https://todogroup.org/guides/starting/) +* [如何关闭一个开源项目(Linux 基金会 TODO 组)](https://todogroup.org/guides/shutting-down/) +* [开源项目的市场营销(Linux 基金会 TODO 组)](https://todogroup.org/guides/marketing-open-source-projects/) +* [在开源社区中建立领导力(Linux基金会 TODO 组)](https://todogroup.org/guides/building-leadership/) +* [社区健康分析开源软件(Linux 基金会 CHAOSS)](https://chaoss.community/) +* [如何衡量开源社区的健康状况](https://opensource.com/article/19/8/measure-project) +* [社区健康文件(GitHub.com)](https://docs.github.com/en/github/building-a-strong-community/creating-a-default-community-health-file#about-default-community-health-files) +* [CII最佳实践徽章(Linux 基金会核心基础设施倡议)](https://bestpractices.coreinfrastructure.org/en) +* [DCO 版本 1.1](https://developercertificate.org/) +* [个人贡献者许可协议(ICLA)](https://www.apache.org/licenses/icla.pdf) +* [企业贡献者许可协议(CCLA)](https://www.apache.org/licenses/cla-corporate.pdf) +* [德国版权法](https://dejure.org/gesetze/UrhG/69b.html) -- API = Application Programming Interface -- CII = Core Infrastructure Initiative -- CLA = Contributor License Agreement -- CCLA = Corporate Contributor License Agreement -- CHAOSS = Community Health Analytics Open Source Software -- CNCF = Cloud Native Computing Foundation -- DCO = Developers Certificate of Origin -- ECC = Export Control and Customs -- ECCN = Export Control Classification Number -- GPL = GNU General Public License -- ICLA = Individual Contributor License Agreement -- IDE = Integrated Development Environment -- IP = Intellectual Property -- JSON = Java Script Object Notation -- KPI = Key Performance Indicator -- LFX = Linux Foundation Collaboration Metrics -- MIT = Massachusetts Institute of Technology -- NPM = Node Package Manager -- OSI = Open Source Initiative -- OSPO = Open Source Program Office -- OSS = Open Source Software -- PyPI = Python Package Index +# 附录 -## References +## 在 git 中管理工作与个人电子邮件 -* [Open Source Archetypes: A Framework for Purposeful Open Source (Mozilla)](https://blog.mozilla.org/wp-content/uploads/2018/05/MZOTS_OS_Archetypes_report_ext_scr.pdf) -* [Starting an open source project (LF TODO Group)](https://todogroup.org/guides/starting/) -* [Shutting down an open source project (LF TODO Group)](https://todogroup.org/guides/shutting-down/) -* [Marketing open source projects (LF TODO Group)](https://todogroup.org/guides/marketing-open-source-projects/) -* [Building leadership in an open source community (LF TODO Group)](https://todogroup.org/guides/building-leadership/) -* [Community Health Analytics Open Source Software (LF CHAOSS)](https://chaoss.community/) -* [How to measure the health of an open source community](https://opensource.com/article/19/8/measure-project) -* [Community health files (GitHub.com)](https://docs.github.com/en/github/building-a-strong-community/creating-a-default-community-health-file#about-default-community-health-files) -* [CII Best Practices Badge (LF Core Infrastructure Initiative)](https://bestpractices.coreinfrastructure.org/en) -* [DCO version 1.1](https://developercertificate.org/) -* [ICLA](https://www.apache.org/licenses/icla.pdf) -* [CCLA](https://www.apache.org/licenses/cla-corporate.pdf) -* [German Copyright Act](https://dejure.org/gesetze/UrhG/69b.html) +在开源领域,人们可能拥有一个早于其加入我们当前组织的线上身份。同时,组织可能希望代表他们进行的贡献使用公司电子邮件进行。 -# Appendix -## Managing work vs personal emails in git -In the world of open source, folks may have an online identity that pre-dates -their employment with our current organization. Simultaneously, the organization -may want contributions done on their behalf to happen with corporate emails. +解决这一问题的一种方法是,在每个仓库的基础上对其提交电子邮件进行编码,例如: -One way that folks can solve this is by encoding their commit email on a -per-repository basis, like: ``` git config user.email "simba@special-email.example.com" ``` +如果你管理多个仓库,这将会变得难以管理且容易忘记。相反,我们可以利用 git 的一个功能,该功能允许我们根据不同的目录结构进行不同的配置。 +我们的 `~/.gitconfig` 文件可能类似于: -If you work with several repositories, this will become difficult to manage and -easy to forget. Instead, we can use a feature of git which allows different -configurations based on our directory structures. - -Our `~/.gitconfig` file might look like this: ``` [user] @@ -712,17 +705,11 @@ Our `~/.gitconfig` file might look like this: path = ~/my-company/.gitconfig ``` -This sets our default email (which, in this case, is for a personal -account). If we have repositories in the `~/my-company` directory, we'll load an -additional git config file which is located at `~/my-company/.gitconfig`. That -file might look like: +这设置了我们的默认电子邮件(在这种情况下,是个人账户的电子邮件)。如果我们在 `~/my-company` 目录下有仓库,我们将会加载一个额外的 git 配置文件,该文件位于 `~/my-company/.gitconfig`。该文件可能看起来像这样: ``` [user] email = simba@very-corporate-email.example.com ``` -Now when our user commits changes, it will use their personal email by default, -or their corporate email for any repositories within the `~/my-company` -folder. Note that the name attribute is inherited from the base configuration, -so we don't need to double specify it. +现在,当用户提交更改时,它将默认使用期个人电子邮件,或者对于 `~/my-company` 文件夹内的任何仓库,它将使用其公司电子邮件。请注意,name 属性是从基础配置中继承的,因此我们不需要重复指定它。 diff --git a/content/zh-CN/guides/participating.md b/content/zh-CN/guides/participating.md index d3838c47..a5388e6c 100644 --- a/content/zh-CN/guides/participating.md +++ b/content/zh-CN/guides/participating.md @@ -1,170 +1,207 @@ --- -title: Participating in open source communities +title: 参与开源社区 --- -Open source has become the de facto way to build software – not only in tech, but across diverse industries. As companies use open source code to build their own commercial products and services, they also see the strategic value of contributing back to those projects. +开源,已经成为构建软件的默认方式——不限于科技领域,在各行各业中都是如此。随着企业利用开源代码来构建自己的商业产品和服务,他们也注意到了向这些开源项目贡献价值的战略意义。 -However, diving in without an understanding of those projects, their communities, and how they operate can lead to frustrations for those companies as well as the open source communities. Approaching open source contributions without a strategy can tarnish a company’s reputation in the open source community and incur legal risks. +然而,如果在不了解这些项目、它们的社区以及它们如何运作的情况下就贸然参与其中,或许会给这些公司和开源社区造成影响。毫无章法地进行开源贡献,很可能损害企业在开源社区的声誉,甚至招惹法律风险。 -This guide covers what it means to contribute to open source as an organization and how to become a good corporate citizen. Learn how open source projects are structured, how to contribute, why it’s important to devote internal developer resources to participation, and why it’s important to create a strategy for open source participation and management. +本指南阐述了组织为开源项目做出贡献的意义以及如何成为一个合格的社区成员。了解开源项目的构建、如何参与贡献、为什么一定要投入内部开发资源去参与,以及为什么需要制定一个参与及管理开源的策略等等,这些对于组织都具有重要的价值。 -**Table of Contents** +**目录** +- [为什么要为开源项目做贡献](#为什么要为开源项目做贡献) +- [如何管理开源项目](#如何管理开源项目) +- [如何做出贡献](#如何做出贡献) +- [对于一个组织来说,贡献意味着什么](#对于一个组织来说贡献意味着什么) +- [怎样以一名合格的社区成员身份去参与开源项目](#怎样以一名合格的社区成员身份去参与开源项目) +- [向上游贡献代码的最佳实践](#向上游贡献代码的最佳实践) +- [如何制定自己的开源贡献策略](#如何制定自己的开源贡献策略) +- [掌握开源贡献的11个技巧](#掌握开源贡献的11个技巧) +- [结束语](#结束语) -- [Why contribute to open source?](#why-contribute-to-open-source) -- [How open source projects are managed](#how-open-source-projects-are-managed) -- [How contributions work](#how-contributions-work) -- [What it means for an organization to contribute](#what-it-means-for-an-organization-to-contribute) -- [How to be a good corporate citizen when participating in an open source project](#how-to-be-a-good-corporate-citizen-when-participating-in-an-open-source-project) -- [Best practices to contribute code upstream](#best-practices-to-contribute-code-upstream) -- [How to create your open source contribution strategy](#how-to-create-your-open-source-contribution-strategy) -- [11 tips for mastering open source contributions](#11-tips-for-mastering-open-source-contributions) -- [Final words](#final-words) -## Why contribute to open source? +## 为什么要为开源项目做贡献 -It might be impossible to find an organization today that doesn’t benefit in some way from open source software. Some companies, like Intel, IBM, and Samsung, have entire open source programs devoted to contributing to open source communities. Other companies become consumers of open source almost accidentally when the software is brought in by system administrators or developers. +目前几乎不可能找到一个没有从开源软件中获益的组织。一些企业在致力于为开源社区做出贡献的活动中拥有完整的开源计划,如英特尔、IBM和三星。很多公司是在系统管理员或开发人员引入开源软件时,悄然间成为开源用户。 -Many companies are commercially dependent on open source software that is critical to the success of the company, so it becomes advantageous (and necessary) to contribute to open source software projects. Since 2005, more than 13,500 developers from more than 1,300 different companies have contributed to the Linux kernel, and it is just a single project! +许多公司对开源软件具有依赖性,因为这些软件对它们的成功至关重要,因此它们为开源软件项目做出贡献是趋利的(并且是必要的)。自2005年以来,已有来自1300多家不同公司的超过13500名开发者为Linux内核做出了贡献,而这只是一个单独的项目! -> “For many larger projects, we know that most of our contributors are going to be people who work at companies that need to use projects like Ceph and Gluster. We have customers, and customers often contribute to software because they're using it. We consider both the individual participation and the company participation as success stories.” [Stormy Peters](https://twitter.com/storming) – Senior Manager, Community Leads at Red Hat -While some of these contributions may come from organizations that just want to give back to the community, there are plenty of strong business reasons to contribute to the open source software projects used within your organization. Here are just a few of the benefits of contributing: +> “对于许多大型项目来说,我们知道大多数贡献者来自那些在需要使用像Ceph和Gluster等项目的公司。我们的客户往往会在使用软件过程中对代码做出贡献。无论是个人参与或是企业参与,我们都将其视作成功案例。” ——[Stormy Peters](https://twitter.com/storming) ,Red Hat社区负责人、高级经理 -* **Attract talent.** When you rely on open source software, the best place to find people who know the project inside and out is in the community for that project. By working publicly in the community, you can attract people who see that they can get paid to work on their favorite open source project. When your employees are working side by side with these people every day, they can help you identify good fits for your company. (See also: our guide on Recruiting Developers.) -* **Lower maintenance costs.** Companies that start fixing bugs or adding new features and functionality to an open source project without contributing them back into the upstream project quickly learn that upgrading later to add new features or apply security fixes can be a nightmare that drives maintenance costs through the roof. Contributing your changes back into the upstream project means that they will automatically be included in future updates without incurring additional maintenance costs. -* **Influence the direction.** In an open source project, new features and functionality come from contributions that inevitably influence the project’s direction. If you want a project to offer functionality important to your organization, then you need to have active contributors who can any implement potential changes. Through your contributions, you can influence the project’s direction (assuming that your changes align with the project’s goals). -However, you need to be a bit careful about how you engage these communities to avoid perception problems or other issues with your contributions. Every open source project has slightly different norms, expectations, and processes that need to be thoroughly understood before your organization should begin contributing. This can be achieved by having someone join the community and spend some time observing, or you can hire someone who already has a proven track record of participation in the community. +虽然其中一些贡献可能来自那些只想回馈社区的组织,但仍有很多强有力的商业理由促使您为组织内使用的开源软件项目做出贡献。以下是参与贡献的一些激励: -## How open source projects are managed +* **吸纳人才。** 当你需要部署开源软件,对该项目最熟悉的人显然会出现在项目所属的社区。通过在社区中的公开信息,你可以吸引那些得知可以从事他们最喜欢的开源项目并获得报酬的人。当你的员工每天与这些人一起工作时,他们也可以帮助公司找到合适的人才。(参见:开发者招聘指南) + -At first glance, open source projects may look chaotic. People who are completely new to open source software often wonder how a group of random people can throw code together and end up with a stable product used by millions of people. It doesn’t take long to realize that this isn’t how open source software works. Almost every open source project has some structure, and the best projects will have the structure and project governance clearly described on the project website or in the documentation. (GitHub’s guides for contributors have a great overview of project anatomy.) +* **降低成本。** 如果在给开源项目修复bug或添加新功能和特性时,组织并没有将其贡献给上游项目,那么他们很快就会发现,未来在关于添加新特性或应用安全修复的升级时将遭遇一场噩梦,这会导致维护成本飙升。如果将您的修改工作贡献给上游项目,意味着它们将自动包含在未来的更新中,而不会再产生额外的维护成本。 + +* **影响方向。** 在开源项目中,新特性和功能的贡献必然将会影响到项目的发展方向。如果您希望某个项目提供对您的组织很重要的功能,那么您需要有活跃的贡献者去实现任何可能的更新。通过贡献,您可以影响项目的方向(假设您的变更与项目的目标一致)。 -While the exact governance model varies widely across projects, there are some commonalities: +然而,你需要在参与这些社区时保持谨慎,以避免您的贡献出现认知性的错误或或其他问题。每个开源项目都有略微不同的规范、期望和流程,在您的组织开始贡献之前,需要彻底吃透它们。这可以通过让某人加入社区并花一定时间观察来实现,也可以雇佣一名具有社区参与经历的人员。 -* **Leader:** At a minimum, there should be someone responsible for making final decisions about features, releases, and other activities. In some cases this is a single person – for example, Linus Torvalds is the original author of the Linux kernel and has the final say on anything related to its evolution. In other projects, there may be one or more committees responsible for various aspects of a project, like the Core Technical Committee that governs the Node.js project. -* **Maintainers:** Most leaders delegate some of the decisions to people who are responsible for maintaining specific parts of the project. In large projects, these maintainers may also delegate to people who are responsible for subcomponents of their portion. For example, Linus Torvalds delegates Linux kernel documentation decisions to Jonathan Corbet. -* **Committers:** Some projects also have groups of people who have contributed to the project and are considered reliable and responsible enough to be allowed to commit directly to all or some parts of the project, rather than having to submit to a maintainer for review. Contributions from committers are still subject to review by maintainers or project leaders and may be reverted if there are any concerns. -* **Contributors:** Many people contribute to open source projects with code, documentation and other enhancements. These contributions are usually subject to a review from an experienced committer and/or maintainer before they are included. -* **Users:** Arguably the group most important to an open source project’s growth and development. Users give the project a purpose and help it evolve. These valuable members of the community can provide feedback about features, bug reports and more. -Community can make or break an open source project. Having a strong, vibrant, and diverse open source community is important to a project’s success. All of the people in the roles listed above are part of this community, along with people filling other critical roles in the project for documentation, marketing, user support, and so much more. +## 如何管理开源项目 -## How contributions work +开源项目给人的第一印象可能是毫无头绪。对开源软件完全陌生的人经常很疑惑,这群不固定的人是如何把代码聚合在一起,并最终编写出一个被数百万人使用的稳定产品。但你很快就会意识到,这并不是开源软件的工作模式。几乎每个开源项目都有特定的框架结构,优秀的项目会在网站或文档中清晰地描述其结构和项目治理。(GitHub的贡献者指南中对项目结构做出了很好的概述。) -The contribution process varies depending on the open source project. For example: +虽然不同的项目中的具体治理模型千差万别,但仍然具有一些共性: -* Projects have different guidelines with information about coding style, language, formatting, bug/ticket numbers, release timing, and more. -* Some projects require signed contributor agreements, while others have signed-off-by or other processes. -* Projects may require patches to be posted to the mailing list, but others will ask for pull requests. +* **领导者:** 应当至少有一个人负责对功能、发布和其他活动做出最终决策。在某些情况下,这是一个具体的人——例如,Linus Torvalds是Linux内核的原始作者,并对与其演变相关的任何事情拥有最终决定权。在其他项目中,可能有一个或多个委员会负责项目的各个维度,比如负责治理Node.js项目的核心技术委员会。 -These are just a few ways that the contribution style might differ, so it’s important to start by reading the documentation about how to contribute. Many projects will include this documentation as a CONTRIBUTING or README file in the home directory of the code repository. Otherwise, you may need to dig into the documentation or community section of the website to find it. It’s also a good idea to read some of the other documentation, community guidelines, and code of conduct if they are available to make sure that you understand exactly what behavior is expected within a particular project. +* **维护者:** 大多数领导者会将一些决策权委派给负责维护项目的部分特定人员。在大型项目中,这些维护者可能还会将职责委派给负责其分系统组件的人员。例如,Linus Torvalds 将 Linux 内核文档的决策权委托给了 Jonathan Corbet。 -If you are a first-time contributor to a project, you might consider finding a mentor or an experienced project member who can review your work and provide you with some feedback as you prepare your first couple of contributions. +* **提交者:** 有的项目还拥有一类特定的角色,这部分人是对项目具有一定的贡献,并被认为是可靠和有明确责任的,因此被允许直接对项目的全部或部分内容进行提交(commit),而不必提交给维护者去审查(review)。提交者的贡献仍然受到维护者或项目负责人的审查约束,如果出现任何问题,都可能会被退回。 -After submitting a contribution using the process described in the documentation, you must remain available to respond to feedback. Common feedback would include questions about how something works or why you chose a particular approach, along with suggestions for improvements or requests for changes. This feedback can be tough sometimes, so it helps to assume that the feedback is in the spirit of making your contribution better. Avoid getting defensive. You may need to go through several rounds of resubmission and additional feedback before your code is accepted, and in some cases it may be rejected. There are many valid reasons why something might not be accepted, so don’t take it personally if your code is rejected. If possible, try to learn more about why your contribution was not accepted to help increase the chances of getting your next contribution included. +* **贡献者:** 许多人通过代码、文档和其他附加功能为开源项目做出贡献。这些贡献在被包含(include)之前,通常需要经过有经验的提交者和/或维护者的审查(review)。 -Keep in mind that if your contribution was accepted, you may be expected to maintain it over the long-term. This is especially true for large contributions, new features, or standalone code, like a driver for a specific piece of hardware. For small contributions and bug fixes, it is unlikely that there will be any long-term maintenance expected. +* **用户:** 这应该是开源项目增长和发展中最重要的群体。用户赋予项目以发展方向并助力其成长。在社区中,这些宝贵的成员可以提供关于功能、错误(bug)报告等方面的反馈。 -## What it means for an organization to contribute -Over the years, the relationship between some open source projects and the companies or other organizations that use or contribute to those projects has been a bit rocky. Organizations are often accustomed to forming business relationships in ways that don’t usually work for open source projects, so some organizations struggle to understand how to contribute productively. +对于开源项目而言,成也社区,败也社区。拥有一个强大的、充满活力和多样化的开源社区对于项目的成功至关重要。上述角色的所有人员都是这个社区的一份子,同时也离不开其他关键角色,例如负责文档、运营、用户支持等工作的人员。 -Another challenge is that an organization can seem self-serving or troublesome if its needs aren’t aligned with the needs of the open source project. This can cause an open source community to become suspicious of the motives behind an organization’s contributions. In the past, some organizations have tried to make huge contributions that weren’t aligned with the goals of the project, and in certain projects, this history may make it harder for the community to trust organizations. -However, there are also many success stories. One is the Linux kernel, where organizations contribute in meaningful ways. The most common and easiest way for an organization to contribute to an open source project is to pay employees who have a significant amount of time devoted to participation in open source projects. In order for this to be successful, those employees need to understand the contribution processes and norms within that project to increase the chances that their contributions will be accepted. If your organization is new to a project or new to open source, consider hiring someone who has already contributed and is known within the open source project you want to contribute to; they can provide guidance on contributing successfully. Experienced contributors might be willing to mentor your employees as they pursue an open source career path. (See our guide on Recruiting Open Source Developers.) +## 如何做出贡献 + +贡献的过程因具体的开源项目而各有不同。例如: + +* 针对编码风格、语言、格式、bug /任务单编号、发布时间等信息,每个项目会提供不同的指南。 +* 有些项目需要签署贡献者协议,而另一部分项目则采用签名或其他流程。 +* 有些项目可能要求通过邮件列表发送补丁,也有的项目会要求拉取请求(PR)。 + +上述这些只列举了可能存在的几种不同贡献类型,所以我们很有必要优先阅读有关如何贡献的文档。许多项目都会将这份文档作为贡献文档或README文档,包含在代码存储库的主目录中。不然的话,您可能需要深入查阅网站文档或在社区部分才能找到它。发现并阅读一些具有使用价值的其他文档、社区指南和行为准则也是一个好办法,这能确保您准确地理解特定项目所期望的行为。 + +如果是第一次为某个项目做贡献,您可以考虑找一个导师或经验丰富的项目成员来 review 您的成果,并在您开始准备首次贡献时提供一些指导意见。 + +按照文档所描述的过程提交贡献后,您应当对反馈的信息及时做出响应。常见的反馈可能是关于某些任务是如何执行的或者为何选择某个特定方法,以及关于完善或改进请求的建议。这些反馈有时会很严苛,所以应假设它们是为了帮助你将贡献进一步完善,以免产生抵触心理。在代码被接受之前,您可能需要经历几番重新提交和补充反馈;有的时候还可能会被拒绝。拒绝某个东西的理由可能有一万种,因此如果你的代码被拒绝了,要知道这只是对事不对人。如果有机会,尽可能去了解更多关于你的贡献为什么没有被接受的信息,以增加下次贡献被接收的机会。 + +请牢记一件事:如果您的贡献被接受,您可能需要长期去维护它。对于大型贡献、新功能或独立代码(如特定硬件的驱动程序)尤其如此。对于小规模贡献和bug修复,则不太可能抱有任何长期维护的期望。 + + +## 对于一个组织来说,贡献意味着什么? + +多年以来,一些开源项目与使用或贡献这些项目的公司或其他组织之间的关系一直不大稳定。很多组织所习惯的商业关系模式通常并不适用于开源项目,因此有些组织需要花费很大精力去理解如何有效地做出贡献。 + +还有一个考验,如果一个组织的诉求与开源项目的目标不一致,它可能会被视为自私自利或者是来踢场子的。这可能导致开源社区对组织贡献背后的动机产生怀疑。如果有些组织曾经试图做出与项目预期所背离的巨大贡献,那么在某些项目中,这段历史可能使得它更加难以获得社区的信任。 + +当然,成功的案例也是数不胜数。其中一个典型就是Linux内核,无数组织通过各种有意义的方式为其做出贡献。对于一个组织来说,为开源项目做出贡献的最常见和最简单的举措,就是向那些投入大量时间参与开源项目的员工支付报酬。为了取得成功,这些员工需要详细了解项目的贡献流程和规范,以增加其贡献被接受的机会。如果您的组织刚刚接触一个新项目或者第一次接触开源,可以考虑雇用已经做出过贡献并在您意向的的开源项目中有一定名气的人;他们能够在成功贡献方面提供专家支持。经验丰富的贡献者可能愿意指导您的员工,因为他们所致力于的开源职业路线。(参见:开源开发者招聘指南。) ![](https://www.linuxfoundation.org/wp-content/uploads/2017/08/Kubernetes-contributors-pie-chart.png) -Most projects offer other ways for organizations to participate, but these are likely to vary by project. Open source projects and the foundations that support them often need resources that organizations can provide, including infrastructure, funding, marketing, legal services, and much more. Many projects allow companies to sponsor or join a project more formally by contributing funding and/or people in exchange for some advisory role in the project or enhanced visibility. +大多数项目可以为组织提供多种参与方式,但这些方式在不同的项目中也可能有所差别。开源项目及其背后的基金会通常需要组织提供诸如基础设施、经费、市场营销、法务等资源。许多项目允许公司通过提供资金和/或人力资源来赞助或更正式地加入到项目中,以换取项目中专家资源或提高知名度。 + +例如,Node.js基金会董事会由企业成员的代表、技术指导委员会的代表以及个人会员选举的代表所组成。董事会中的企业会员将根据规模大小提供从5000美元到25万美元不等的赞助。虽然每个项目对赞助或会员资格的规定略有不同,但为开源项目提供经费支持可以有助于它覆盖开支并持续成功运行。 + + +## 怎样以一名合格的社区成员身份去参与开源项目 + +如果本指南和大多数开源项目之间存在一个共识,那就是每个项目都是独特的。每每加入一个新的开源项目,您都需要花费一定时间去熟悉其运行模式并探索适合的参与方式。 + +如果组织参与到开源项目中,那么涉及到这些项目的每个员工都需要经历这个学习过程。以下建议可以帮助大家有个好的开端。 + +* **加入社区。** 各个社区的参与方式和渠道有所不同。请通过阅读文档来了解有关该社区的信息,并加入主要沟通渠道,这里可能包括邮件列表、论坛、IRC、Slack、bug跟踪器、源代码库等。 + +* **潜心学习。** 加入社区后不要急于做出贡献,首先要沉下心来,花费大量时间去阅读存档以吸取其中的文化。在参与项目前,要理解这个社区的规则和愿景。在阅读和倾听上花费的时间越多,您的第一个贡献被接受的可能性就越大。 + +* **了解治理结构。** 在做出贡献之前,阅读关于项目治理和管理的文档或网页资源。您应当明白是哪些人负责对不同类型的贡献做出决策,以及如何决策。 + +* **从小处着手。** 从解决一个简单的bug或进行文档修复开始。通过在一个无伤大雅的小贡献来学习流程并纠正错误习惯会更加容易。这对贵组织的诉求至关重要。在处理更复杂的贡献时,在不太重要的微小贡献方面出现错误,应当如同进行更复杂的贡献一样如履薄冰。 + +现在贵组织已经明晰了如何做出最初的小型贡献,您需要在此基础上继续做出更大的贡献,并在项目中产生更大的影响。 + +* **在活动中建立社交。** 个人和集体的关系是参与开源社区的一个重要维度。如果想与项目的其他成员建立持久的联系,最好的选择就是参加活动。面对面沟通最能让大家互相全面的理解对方,通过这个方式您可以更好的了解电子邮件或者鼠标背后的那个人。这些活动可以吸引不同身份的人,从项目领导者、热心用户,到通过赞助、展位和演示来对项目提供支持的组织。如果没有赞助者的资金支持,大多数活动是不可能落地的。这些组织的支持让我们能够聚到一起,互相学习,共同促进项目目标的实现。 + +* **尽早融入社区并保持活跃度。** 有些组织容易犯一个错误,就是先自行开发大段代码,然后直接将其丢进开源项目中,这个行为几乎从未被社区视为一种积极互动的方式。实际上,开源项目可能非常复杂,看似明显的改动可能会给项目的其他部分造成深远的影响。一般来说,任何重大变更都需要在实施前进行社区讨论,确保没有副作用,并且确认该解决方案与项目的更长远的发展目标保持一致。在您投入大量精力来创建代码库之前,在社区展开针对具体问题而非解决方案的讨论,可以对您的工作有所帮助。(参见: [Jon Corbet的Linux内核社区参与指南](https://www.linux.com/publications/how-participate-linux-community) 。) + +* **向上游贡献。** 即将您对开源项目所做的任何更改都发送到原始维护者那里,以期他们便将其纳入到即将发布的软件版本中。如果贵司是开源新兵,您可能需要花一些时间去指导员工,让他们了解向上游贡献的重要性。有时候,人们倾向于通过一个简易且杂乱的补丁让基础架构中的工作更加便利,但并愿意去清理它并按照严格流程使其被上游项目所接受。 + +然而,从长远来看,在每个升级周期中所需要的测试、更新和重新应用的简易补丁几乎总是比将其直接上游化更加耗时耗力。在社区中,这种行为会被认为是自私的,因为其他人也将受益于您的修复工作,所以这也可能损害您的组织在开源社区中的声誉。 + + +### 向上游贡献代码的最佳实践 + +#### 组织内部 + +1.出于适当的原因,决定向上游贡献。 +2.在设计和运行代码时要考虑到上游项目。 +3.采用“上游优先”策略。即先向上游提交补丁,然后在自己的下游产品中使用。 +4.让您的开发人员参与到开源项目中,哪怕只是软介入。 + +#### 组织外部/面向项目 + +1. 要确保你的贡献对他人有用。 +2. 要遵循恰当的代码编写规范。 +3. 工作应与项目提交过程并行。 +4. 为你的贡献提供文档和说明。 +5. 倾听反馈并以实际行动处理。 +6. 静下心来反复修改直至合格。 + + +对于组织来说最具有挑战性的事情之一,就是懂得如何在开源项目中获得影响力。如果仅仅因为您的组织是一家大型公司,但尚未赢得开源社区尊重的情况下,请不要期望被当作重要角色来对待。影响力来自于参与度。为开源项目做出贡献的人终将随着他们的信任度和责任心得到证明后,随着时间的推移而获得越来越大的影响力和领导地位。 + +我们还应预想到一些冲突,并做好专业的应对准备。考虑到不同的人对于决策、贡献方式或风格会产生分歧,Review的过程可能会相当激烈。要保持冷静和专业性,确信这些反馈并不是针对个人,而是聚焦在贡献上。请记住,您在开源项目中的参与行为是公开的,并且可能永远在互联网上留痕,一次失控的激烈辩论可能会在后续的日子里对您的组织或您本人造成困扰。因为所有这类参与都公开化的,建议为员工提供一些针对性培训,告诉他们如何与难缠的人打交道和解决冲突 + -For example, the Node.js Foundation Board of Directors consists of representatives from corporate members, a representative of the Technical Steering Committee, and representatives elected by the individual membership class. The corporate members comprising a portion of the board pay anywhere from $5,000 for a small organization to $250,000. While each project has a slightly different approach to sponsorship or membership, funding an open source project helps cover expenses and fund its continued success. +## 如何制定自己的开源贡献策略 -## How to be a good corporate citizen when participating in an open source project +一套成熟的开源贡献策略不仅有助于指导您的员工参与开源项目,而且还可以向组织内的管理层证明这种参与的重要性。首先要站在组织的整体业务愿景角度,清晰论证如何将开源工作融入到自己更广泛的战略之中。(参见:创建开源商业策略指南。)通过将开源贡献策略与组织的战略目标建立明确的联系,您可以向高级管理层展示这项工作的价值,并帮助员工了解他们所做贡献的影响。 -If there is an underlying theme for this guide and for open source in general, it’s that every project is different. Every time you join an open source project, you’ll need to spend some time finding your way around and learning how it works. +> “来自领导层的支持以及对开源在战略中所起关键作用的认知是非常重要的。我们应当真正去理解公司的目标,并意识到如何在自己的开源战略中实现它们。”—— [Nithya Ruff](https://twitter.com/nithyaruff) ,Comcast开源实践高级总监 -For organizations participating in an open source project, each employee will need to go through this learning process for each project they participate in. Here are a few things that can help you get started off on the right foot. -* **Join the community.** Each community has slightly different participation modes and channels. Read the documentation to find out about the community, and join the key communication channels, which may include mailing lists, forums, IRC, Slack, bug trackers, source code repositories, and more. -* **Lurk first.** After you've joined the community, spend a significant amount of time lurking and reading the archives to soak up the culture before you start contributing. You’ll want to understand the norms and expectations of this community before you participate. The more time you spend reading and listening, the more likely it is that your first contribution will be well received. -* **Understand the governance.** Read the documentation or website sections about project governance and leadership before contributing. You’ll want to know who makes decisions about different types of contributions, and how. -* **Start small.** Tackle a simple bug or documentation fix to start. It will be easier to learn the process and correct mistakes on a small contribution that isn’t critical to your organization’s needs. Make your mistakes on small and less significant contributions as you work up to the more complex contributions that your organization needs. +一旦制定了与业务愿景一致的目标和策略,我们还需要制定一个实施计划。下面这些问题将帮助你思考该计划可能需要解决的一些事情: -Now that your organization has figured out how to make those first small contributions, you’ll need to build on those contributions to begin making larger contributions and having a bigger impact in the project. -* **Build relationships at events.** Relationships on a personal and organizational level are an important aspect of participating in an open source community. One of the best ways to build lasting relationships with other project members is by attending events. There is nothing quite like meeting someone in person to better understand them as a human being on the other side of their email address or online handle. These events attract a varied mix of people, from project leaders and passionate users to organizations that support projects through sponsorships, booths, and demos. Most of these events would not be possible without financial support from sponsoring organizations that allow us to get together and learn from each other while helping to achieve the goals of the project. -* **Include the community early and often.** Some organizations make the mistake of developing big chunks of code in house and then dumping them into the open source project, which is almost never seen as a positive way to engage with the community. The reality is that open source projects can be complex, and what seems like an obvious change might have far reaching side effects in other parts of the project. Any significant change is likely to require some community discussion before it moves to implementation to make sure that there are no side effects and that the solution is aligned with the broader goals for the project. While you discuss it with the community, it can help to focus on the problem, rather than a specific solution, before you invest too much time in the creation of a body of code. (See Jon Corbet’s guide on [How to Participate in the Linux Kernel Community](https://www.linux.com/publications/how-participate-linux-community).) -* **Contribute upstream.** This refers to the practice of sending any changes you make to an open source project back to the original maintainers for inclusion into an upcoming release of the software. If your organization is new to open source, you may need to spend some time educating your employees about the importance of upstreaming contributions. In some cases, people may think it will be easier to do a quick and dirty patch to get something working in your infrastructure and not bother with cleaning it up and going through the process of getting it accepted into the upstream project. +* **这些贡献为什么很重要?** 空谈自己的伟大理想是很容易的,要拿出能说服大家的论据来解释这项工作为什么对组织很重要,具有什么样的战略意义。 -However, over the long-term, the quick patch that needs to be tested, updated and reapplied during every upgrade cycle is almost always going to take more time and effort than upstreaming it. This behavior can also be perceived as selfish within the community, since others might also benefit from your fixes, so it could also harm your organization’s reputation in open source communities. +* **我们组织内部使用了哪些开源项目?** 耗费一些时间去评估整个组织中已经使用的开源项目,以确定哪些对您的业务具有战略意义。您可能希望重点关注以下几个方面:关键业务基础设施(运营),影响产品发布能力的开发和部署工具,以及面向客户的产品或服务的重要软件。 -### Best Practices to Contribute Code Upstream +* **我们应该对哪些项目做出贡献?** 大多数组织所利用的开源项目有很多,只需确保您的计划所关注的是最重要的项目,这一点非常重要。某个项目不在目标列表上,不代表着我们不能为该项目做出贡献;这仅仅意味着它不是您组织的重点关注对象。如果一个开源项目对您的业务至关重要,并且有可能导致严重的停机时间或中断您为客户服务响应的能力,那么它可能是一个很好的候选贡献对象。 -#### Internal to your organization +* **我们已经做出了哪些贡献?** 有时候,您的员工或许已经对开源项目进行了更改。他们可能会创建内部使用的补丁,或者已经将这些补丁贡献给上游项目以避免自行维护。花点时间和内部团队进行交流,找出可以做出贡献的潜在因素,同时评估一下这些员工是否已经有人具备做出贡献的技能和兴趣。 -1. Decide to upstream for the right reasons. -2. Design and implement code with upstreaming in mind. -3. Adopt an “upstream first” policy. Submit patches upstream first, and consume in your own products downstream. -4. Keep your developers involved in the open source project, even if it is just a soft involvement. +* **我们是否具备相关专业知识,是否需要人才引进?** 正如本指南前面讨论的,重要的是找到那些既有创建贡献的能力、又有与社区合作并让贡献被接受的社交能力的人才。如果您已经有一些员工为这些项目做出贡献,那么可以考虑利用现有员工。如果没有,你则应该考虑聘用一个已经在项目中成功完成贡献的人。就像其他任何计划一样,你还需要确保自己有实现目标所需的资源和招聘预算。 -#### Externally/toward the project +* **项目资助/会员资格需要多少经费?** 查阅您所选择项目治理模式,以确定是否有针对项目或项目所在基金会的企业会员资格或赞助选项。这可以为促进项目成功提供所需资金,有时也可以帮助您的组织更深入地参与其中,例如担任专家顾问,或者对项目产生一定的影响力。除了直接资助之外,还可以考虑赞助相关的会议。这些活动有益于展示您的工作,并帮助您结识潜在的雇员。 -1. Ensure that your contributions are useful to others. -2. Follow proper coding style. -3. Work within the submission processes of the project. -4. Provide documentation and explanation around your contributions. -5. Listen to feedback and act upon it. -6. Be patient and continue to rework the code until acceptance. +* **如何推广我们的开源成果?** 依赖组织去营销或推广您对开源的贡献可能并不顺畅。因此,有必要将这件工作纳入到实施计划中,以确保大家都知悉您将如何在公共场合分享成果。赞助、在项目会议或其他活动上发言,都是宣传您所做工作和招募贡献者的有效方式。尤其不要忽视员工所在地区用户组的参与。对本地团体施以资助并委派贡献者去讲座,有利于在当地招募到热衷于某个特定开源项目的人。 -One of the most challenging things for organizations is understanding how influence is earned within open source projects. Just because your organization is a big deal, doesn’t mean that you should expect to be treated like one without earning the respect of the open source community. Influence comes from participation. Some of the people contributing to an open source project will eventually earn positions of greater influence and leadership over time after they prove that they are reliable and responsible. +* **我们需要哪些贡献指南或流程?** 这类指南流程应该尽可能少的罗列规则和规定,而更多地关注于引导人们成功地为开源项目做出贡献。如果大家可以通过行为指南和检查清单来确保自己做好了成功贡献所需的一切准备,而不会遇到许可或保密的问题,这才是最有效果的。这也更加有助于为新手在作出贡献之前以内审方式提供一个获取反馈的安全缓冲。 -You should also expect some conflict and be ready to handle it professionally. The review process can get quite heated as people disagree with decisions, approaches or styles of contributions. It’s important to remain calm and professional while making sure that the feedback stays focused on the contribution rather than becoming personal. Keep in mind that your participation in an open source project is public and could remain on the internet forever, and one heated discussion that gets out of hand can come back to haunt you as an organization or an individual at a later date. Because all of this participation is very public, offering some training about handling difficult people and resolving conflict for your employees might be a good idea. +* **哪些培训是必要的?** 关于如何做出贡献的最佳实践训练,以及关于开源许可证、治理和参与开源社区相关规范的常态化培训,都是非常有价值的。关于冲突解决、应对难缠的人和其他社交技巧的培训也有助于防止未来发生问题。为了让这项工作拥有持久生命力,可以培训计划中添加一些程序,让有经验的开源工作者对新手进行“导师型”教学。 -## How to create your open source contribution strategy +* **如何判断计划是否成功?**每个计划都应该包括成功标准和监督计划。这些应该可以从策略中直接导出,以确保你正在跟踪的是对组织至关重要的活动,而非最容易衡量的活动。如果您需要进行评估或者需要度量工具,使用开源的 [GrimoireLab](http://grimoirelab.github.io/) 项目将是一个很好的开始。(参见:开源项目成功的衡量指南。) -Having a deliberate and thoughtful open source contribution strategy not only helps guide your employees when participating in open source projects, but it can also help justify this participation to senior management within your organization. It’s important to start by looking at your organization’s overall business goals to figure out how your open source efforts fit into your broader strategies. (See our guide on Creating an Open Source Business Strategy.) By clearly tying your open source contribution strategy to the organization’s strategic efforts, you can show senior management why the work is important and help your employees understand the impact of their contributions. +* **是否需要设立开源办公室?** 设置一个开源项目办公室或负责实施计划的专职人员可以帮助您应对这些事务。至少,您希望有人负责将流程和培训落实到位、提供许可指导、回答高级管理层或贡献者的问题,并在整个组织内传达更新信息。(参见:开源项目办公室创建指南。) -> “Support from leadership and acknowledgement that open source is a business critical part of your strategy is so important. You should really understand the company’s objectives and how to enable them in your open source strategy.” [Nithya Ruff](https://twitter.com/nithyaruff) – Senior Director, Open Source Practice at Comcast -Once you've developed some goals and strategies that are aligned with the business goals, you’ll need to develop an implementation plan. These questions will help you think about some of the things that might need to be addressed in your plan: -* **Why are these contributions important?** It’s easy to jump in and start talking about all of the great things you plan to do, so don’t forget to include compelling arguments for why this work is important and strategic to the organization. -* **Which open source projects do we use within the organization?** Take some time to assess which open source projects are already in use across the entire organization to determine which ones are strategic to your business. A few places you might want to focus your assessment: critical business infrastructure (operations), development and deployment tools that impact your ability to release products, and software that is important for customer-facing products or services. -* **Which projects should we target for contribution?** Most organizations use many open source projects, so it’s important to make sure that your plan focuses on just the most important ones. Just because a project isn’t on the target list doesn’t mean that people can’t contribute to that project; it just means that it isn’t a critical focus for your organization. If an open source project is critical to your business and has the potential to cause significant downtime or disruption to your ability to serve your customers, it’s probably a good candidate for contributions. -* **What are the contributions we are already making?** In some cases, you might already have people making changes to open source projects. They may be creating patches that are used internally, or they could already be contributing those patches back to the upstream project to avoid maintaining them. Spend some time talking to your internal teams to find potential contributions that you can build on while assessing whether or not you already have people on staff who might have the skills and interest to contribute. -* **Do we already have the relevant expertise, or do we need to hire for it?** As discussed previously in this guide, it’s important to find people who have both the skills to create the contribution along with the people skills to work with the community to have the contribution accepted. If you already have people contributing to some of these projects, you might be able to use existing staff. If not, you should consider hiring someone who is already making successful contributions to the project. As with any plan, you need to make sure that you have the resources and hiring budget required for it to be a success. -* **What funding do we need for project sponsorships/corporate memberships?** Look at the governance models for the projects you've selected to determine whether there is an option for corporate membership or sponsorship for the project or the foundation responsible for it. This provides funding to help the project be successful, and in some cases, it can help your organization get more involved in an advisory role or provide some influence into the project. In addition to funding projects directly, consider sponsoring related conferences. These can be great for getting the word out about your work and for meeting people who you might want to recruit. -* **How should we promote our open source efforts?** Depending on your organization, marketing or promoting your open source contributions can be tricky. Therefore, it’s important to include this in your implementation plan to make sure that everyone knows how you discuss your contributions in public. Sponsorships and giving talks at the project’s conference or other events can be a good way to promote the work that you are doing and recruit contributors. In particular, don’t overlook your participation in local user groups where you have employees. Sponsoring those local groups and sending contributors to give talks can be a great way to recruit local people who are passionate about particular open source projects. -* **What contribution guidelines or processes do we need?** These guidelines and processes should be less about rules and regulations and more about helping people be successful in making contributions to open source projects. It can help if people have guidelines and checklists to make sure that they have everything they need to make a successful contribution without running into licensing or confidentiality issues. Especially for new contributors, it can also help to have an internal review process available as a safe place to get feedback before making a contribution. -* **What kinds of training must we provide?** Training on best practices for making contributions, along with some general training about open source licenses, governance, and norms associated with participation in open source communities, can be very useful. Training on conflict resolution, dealing with difficult people, and other people skills can also help avoid issues later. To scale your efforts over time, include in your training plan some programming that provides experienced open source contributors as mentors for new contributors. -* **How will we determine whether the plan is successful**? Every plan should include success criteria and a plan for measuring whether you achieved your goals. This should come directly out of your strategies to make sure that you are tracking those activities that are the most important for your organization, rather than the ones that are the easiest to measure. The open source [GrimoireLab](http://grimoirelab.github.io/) project is a good place to start if you need measurement and metrics tools. (See our guide on How to Measure Open Source Program Success.) -* **Do we need an open source office to manage all of these efforts?** Having an open source program office or dedicated staff who are responsible for implementing the plan can help you navigate this terrain. At a minimum, you’ll want to have someone responsible putting processes and training in place, providing licensing guidance, answering questions from senior management or contributors, and communicating updates throughout the organization. (See our guide on Creating an Open Source Program Office.) +## 掌握开源贡献的11个技巧 -## 11 Tips for Mastering Open Source Contributions +如何在组织中为开源贡献构建一个健康的环境: -How to build a healthy environment for open source contributions in your organization: +1. 制定一套政策和流程来指导开源贡献 +2. 设立一个团队来监督所有开源贡献的审批 +3. 将贡献集中在对您的技术提供支持的领域 +4. 为贡献者提供所需要的IT基础设施和工具 +5. 为员工提供关于最佳贡献实践的培训 +6. 跟踪贡献、评估影响、改进和沟通 +7. 制定一个指导计划来培养经验不足的开发人员 +8. 提供贡献指南、如何做、做什么和不该做什么 +9. 确保开发者能够获得开源法规支持 +10. 从你最重视的开源社区中招聘人才 +11. 始终遵循各个项目所特有的社区流程和做法 -1. Establish a policy and process to guide open source contributions -2. Set up a team to oversee approvals for all open source contributions -3. Focus contributions in the areas that will enable your technologies -4. Provide the needed IT infrastructure and tooling for contributors -5. Offer training to your staff on contribution best practices -6. Track contributions, measure impact, improve, and communicate -7. Establish a mentorship program to train less experienced developers -8. Provide contribution guidelines, how-tos, do’s and don’ts -9. Make open source legal support accessible to developers -10. Hire from the open source communities you value the most -11. Always follow the community processes and practices specific to each project -## Final Words +## 结束语 -Open source projects are here to stay, and they play a critical role in the ability for most organizations to deliver products and services to customers. If your organization wants to influence the open source projects that drive your success, you need to participate. Having a solid contribution strategy and implementation plan puts you on the path towards being a good corporate open source citizen. Good luck! +开源项目会持续存在,在大多数组织向客户提供产品和服务能力的过程中,开源项目都扮演着至关重要的角色。如果组织希望对那些帮助你们成功的开源项目施加影响,则需要您需要参与到其中。拥有一个可靠的贡献策略和实施计划可以祝您走上优秀企业级开源公民的成长之路。祝好运! -## Acknowledgements +### 致谢 -Contributors: +贡献者: ![](https://www.linuxfoundation.org/wp-content/uploads/2017/08/stormy_thumb.png) Stormy Peters diff --git a/content/zh-CN/guides/recruiting-developers.md b/content/zh-CN/guides/recruiting-developers.md index 6bb3a06c..434607fb 100644 --- a/content/zh-CN/guides/recruiting-developers.md +++ b/content/zh-CN/guides/recruiting-developers.md @@ -1,240 +1,256 @@ --- -title: Recruiting open source developers +title: 招聘开源开发者 --- -Experienced open source developers are in short supply. To attract top talent, companies have to do more than hire a recruiter or place an ad on a popular job site. +有经验的开源开发人员非常短缺,供不应求。为了吸引顶尖人才,公司不仅仅雇佣招聘人员或在热门招聘网站上发布广告,还需要更多的举措。 -Your open source program can become one of your most effective recruiting tools. This guide covers how organizations can recruit developers, or build internal talent, by building an open source culture, contributing to open source communities, and creating open source projects. +你的开源计划可以成为你最有效的招聘工具之一。本指南涵盖了组织如何通过建立开源文化、为开源社区做出贡献以及创建开源项目来招募开发人员或建立内部人才。 -**Table of Contents** +**目录** +- [为什么你需要一个招聘策略](#为什么你需要一个招聘策略) +- [开源作为招聘工具](#开源作为招聘工具) +- [开源留任面临的挑战](#开源留任面临的挑战) + - [一种新的招聘理念](#一种新的招聘理念) +- [何时进行招聘而不是培训](#何时进行招聘而不是培训) + - [招聘已经具备经验的开发人员](#招聘已经具备经验的开发人员) + - [培训开发人员参与开源](#培训开发人员参与开源) +- [招聘开源开发人员的五种策略](#招聘开源开发人员的五种策略) + - [1. 参与并在开源项目中培养领导力](#1-参与并在开源项目中培养领导力) + - [2. 创建内部开源文化。](#2-创建内部开源文化) + - [3. 参加并支持开源活动](#3-参加并支持开源活动) + - [4. 将开源纳入工作描述中](#4-将开源纳入工作描述中) + - [5. 投资培训 - 从内部培养人才](#5-投资培训---从内部培养人才) +- [致谢](#致谢) -- [Why you need a recruitment strategy](#why-you-need-a-recruitment-strategy) -- [Open source as a recruitment tool](#open-source-as-a-recruitment-tool) -- [Challenges to open source retention](#challenges-to-open-source-retention) -- [When to recruit vs. train](#when-to-recruit-vs-train) -- [Five strategies for recruiting open source developers](#five-strategies-for-recruiting-open-source-developers) -- [Acknowledgements](#acknowledgements) +## 为什么你需要一个招聘策略 -## Why you need a recruitment strategy +开发人员短缺的情况已经有充分的文献记录了。根据最新的Cloud Foundry报告,仅在美国就有25万软件开发人员职位,还有50万需要技术技能但尚未填补的职位。他们预测未来十年内无法填补的开发人员职位数量将达到100万。 -The growing shortage of developers is well documented. According to a recent Cloud Foundry report, there are a quarter-million job openings for software developers in the U.S. alone and half a million unfilled jobs that require tech skills. And they're forecasting the number of unfillable developer jobs to reach one million within the next decade. +**满足全球需求的技术人员是有短缺的** +强烈同意 18% +有些同意 18% -**There is no shortage of skilled developers to meet global demand** -Strongly 18% -Somewhat 18% +**现在或不久将来将会出现人才短缺** +强烈同意 34% +有些同意 30% -**There is now or will soon be a shortage of skilled developers** -Strongly 34% -Somewhat 30% +**我的公司在雇佣所需技术人员方面没有问题** +强烈同意 20% +有些同意 23% -**My company has no problem hiring the skilled developers we need** -Strongly 20% -Somewhat 23% +**我的公司正在雇佣到具备所需技术开发人员的艰难时期** +强烈同意 27% +有些同意 30% -**My company has a hard time hiring developers with the required skills** -Strongly 27% -Somewhat 30% +开源开发人员——也就是具有重要开源经验的开发人员——是这一人才群体的一个子集。他们同样需求量巨大,而且,因为由于开源社区的分布式特性,他们常常远程工作,所以更为稀缺。这意味着你在与全球公司竞争同一批人才。 -Open source developers – that is, developers with significant open source experience – are a subset of this population. They are also in great demand, and even more rare because they often work remotely due to the distributed nature of open source communities. That means you're competing with companies all over the globe for the same pool of talent. +正如预期的那样,随着公司之间为吸引和留住人才激烈竞争,结果是薪资水平稳步攀升。根据最近的一份报告,目前平均开发人员薪资为104,425美元。根据同一份[报告](http://www.arcgis.com/apps/MapJournal/index.html?appid=b1c59eaadfd945a68a59724a59dbf7b1),仅有八分之一的美国高中(13.2%)提供AP(编者记:Advanced Placement高级学位课程)计算机科学课程,因此开发人员短缺问题的缓解不太可能在短期内出现。 -As expected, the result has been a steady climb in pay as companies fiercely compete to attract and retain talent. The current average developer salary is $104,425, according to one recent report. Given that only one in eight U.S. high schools (13.2%) offer AP computer science classes, according to this same [report](http://www.arcgis.com/apps/MapJournal/index.html?appid=b1c59eaadfd945a68a59724a59dbf7b1), relief for the developer shortage isn’t likely to appear anytime soon. -Skilled open source developers can command a premium. Eighty-nine percent of hiring managers surveyed for the [2017 Open Source Jobs Report](https://www.linuxfoundation.org/publications/open-source-jobs-report-2017/) cite difficulty in finding the right open source skills and expertise. The Jobs Report also found that 60 percent of hiring managers are seeking to hire open source talent, and half are looking for candidates holding certifications. +具有技能的开源开发人员可以获得高额薪资。根据[2017年开源工作报告](https://www.linuxfoundation.org/publications/open-source-jobs-report-2017/)对89%的招聘经理进行的调查,他们表示很难找到合适的拥有开源技能和专业知识的人员。该职场报告还发现,60%的招聘经理正在寻找雇佣开源人才,而有一半的经理在寻找持有认证的候选人。 -This means the salary climb will likely continue over the foreseeable future, fueled by competitive necessity. +这意味着薪资水平的上涨在可预见的未来很可能会继续,并由竞争的必要性一直推动。 -> “There is a myth about engineers that they don’t care much about money. They care about working on cool tech; they care about learning and growing. These are all true but let’s be real, if you want to get people in the door, you need to create economic incentive. If you're not paying people well, they're not going to want to come to your company.” – [Camille Fournier](https://www.linkedin.com/in/camille-fournier-9011812/), Managing Director and head of Platform Engineering at Two Sigma and author of The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change, at [Open Source Leadership Summit](http://events.linuxfoundation.org/events/open-source-leadership-summit) +> “有一个关于工程师的神话,即他们对金钱不太关心。他们关心的是参与到酷炫的技术中去;他们关心学习和成长。这些都是真实的,但让我们面对现实吧,如果你想要吸引人才,你需要创造经济激励。如果你付给人们的薪水不高,他们是不会愿意来你的公司的。” — [Camille Fournier](https://www.linkedin.com/in/camille-fournier-9011812/),Two Sigma公司的平台工程总监兼《The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change》的作者,在[Open Source Leadership Summit](http://events.linuxfoundation.org/events/open-source-leadership-summit)如是上说。 -So while the first step in any developer recruitment strategy is sufficient economic incentive, it is only the opening bid. This is where your open source program comes in. It can help with recruiting open source developers of all skill levels. +因此,任何开发者招聘策略的第一步都是提供足够的经济激励,但这只是开端。这是你的开源计划开起的地方。它可以帮助招募各种技能水平的开源开发人员。 -Filling the talent pipeline will be important for meeting your open source objectives, including your ability to contribute strategically to the open source projects you depend on, as well as grow your own open source technologies and communities. But you need a strategy, a set of processes, and goals in order to achieve this. +填补人才储备对于实现你的开源目标至关重要,包括你对依赖的开源项目战略性地做出贡献的能力,以及发展自己的开源技术和社区能力。但是,你需要一套策略、一系列流程和目标来实现这一点。 -## Open source as a recruitment tool -Before we dive into recruitment strategies, let’s talk about why open source participation can be an effective recruitment tool, as well as some of the challenges it presents to retaining top talent (see the next section). +## 开源作为招聘工具 -Effective recruitment appeals to developer motivation. If you understand what attracts developers to work for you, and on your open source projects (and open source, in general) you can structure your strategies in a way that appeals to them. +在我们深入探讨招聘策略之前,让我们谈谈为什么参与开源可以成为一种有效的招聘工具,以及它给留住顶尖人才带来的一些挑战(见下一节)。 -Camille Fournier says engineers want three things: rewards, respect, and purpose. +有效的招聘可以吸引开发者。如果你了解是什么吸引开发者为你工作和参与你的开源项目(包括一般的开源工作)的话,你就可以设计出吸引他们的策略。 -* **Rewards:** Everything from salary to benefits and perks. -* **Respect:** This is less tangible, but no less real, and is often pinned to professional recognition. -* **Purpose:** A highly visible, challenging, and measurable goal. Without it, respect and recognition cannot exist. +Camille Fournier指出工程师需要三样东西:回报、尊重和目的。 -> “Money is important, but it functions as a representation of recognition, not value. This is why a hedge fund manager can get a $6 million bonus and quit in a huff because they expected $8 million. It is also why a personal note from a project’s leaders goes so far, or a mention in a blog. Don’t get me wrong, the money is important as well, but if we think of it as recognition we can separate the monetary value from the emotional value.” – Jeff Osier-Mixon, Open Source Community Manager at Intel Corporation +* **回报:** 从薪水到福利和特权等各种奖励。 +* **尊重:** 这种东西不太具体,但同样真实,通常与专业认可挂钩。 +* **目的:** 一个高度可见、具有挑战性和可衡量的目标。缺乏它,尊重和认可就无法存在。 -Interestingly, when companies pay developers to work in open source communities it feeds all three needs. And companies increasingly see the value of paying developers to contribute upstream, for multiple reasons. -There are many open source projects where employers aim to make specific contributions that advance their own work and products. If approached correctly, such contributions can earn their developers, and by extension, the employer, respect within the community. Developers also raise their visibility within the community by making solid contributions which leads to future job opportunities with companies that also benefit from their work. +> “金钱很重要,但它是对认可的一种代表,而不是价值。这就是为什么一个对冲基金经理可以拿到600万美元的奖金然后愤然辞职,因为他们期望拿到800万美元。这也是为什么项目负责人的个人便签或者博客中的一篇一旦提及它就能够产生如此大的影响。不要误解我,金钱也同样重要,但如果我们把它看作是认可,我们就可以把货币价值和情感价值分开。” — Jeff Osier-Mixon,英特尔公司的开源社区经理 -However, merely offering time on the clock and company resources for developers to contribute to open source projects and communities isn’t enough to attract and retain top talent, either. Employers must have a complete strategy in place and it has to center on open source transformation – from tools and culture, to your whole philosophy and approach to development. -> “We seek to create a working environment that talent wants to be part of. Our engineers know that they work in an open source friendly environment where they are supported and encouraged to work with the open source communities that are relevant to their work.” – [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), Senior Director of Open Source at Oath (Yahoo + AOL) +有趣的是,当公司支付开发人员参与开源社区工作时,这满足了所有的三个需求。而且,出于多种原因,公司越来越意识到开发人员贡献上游项目的价值。 -## Challenges to open source retention +有许多开源项目,雇主旨在进行特别贡献,以推动他们自己的工作和产品。如果正确对待,这样的贡献可以使他们的开发人员,进而是雇主,在社区中赢得尊重。通过做出扎实的贡献,开发人员还可以提高他们在社区中的知名度,从而获得未来的工作机遇。这些工作机会是来自与他们工作相关的公司。 -One of the biggest challenges with open source recruiting is that open source projects transcend company boundaries. Developers work on their projects, first and foremost, and can easily move between employers that will pay them to work on the same project. +然而,仅仅提供时间和公司资源让开发人员贡献给开源项目和社区并不足以吸引和留住顶尖人才。雇主必须制定一个完整的策略,并且这个策略必须以开源转型为核心,从工具和文化,到整个开发理念和方法。 -This speaks to the motivations of developers who contribute to open source. Money or a certain job title isn’t the end goal. Their career path is fluid and driven by a continuous search for professional development and personal fulfillment – dubbed “respect” by Fournier and “recognition” by Osier-Mixon. According to the latest Open Source Jobs Report, open source developers say the best thing about their job is the ability to work on interesting projects, collaborate with a global community, and work on cutting-edge technology challenges. -A fluid labor pool is also just a natural result of working in the open. Contributors’ work is highly visible, not only to the people working on the project, but potential employers who see their GitHub activity as a public resume. This works to your advantage as a recruiter, but also against you as an employer. +> “我们努力创造一个有吸引力的工作环境,让人才愿意成为其中一员。我们的工程师知道他们在一个开源友好的环境中工作,在这里他们得到支持和鼓励,去与他们工作相关的开源社区合作。” — [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/),Oath(雅虎 + 雅虎通)的开源高级总监 -> “Open source becomes a double-edged sword for HR organizations and engineering organizations when they're hiring. You want to become a place where people are free to be open and contribute to open source and to make themselves more valuable as individuals. Usually the pushback you’ll get from companies is ‘if they make themselves so appealing, they can get poached.’ My response is – yes, absolutely – which is why having an open culture that they want to continue to work in is so critical.” – [Guy Martin](https://www.linkedin.com/in/guywmartin/), Director of Open at Autodesk (Open@ADSK) +## 开源留任面临的挑战 -This reality is often disconcerting to the more structured corporate world which is better attuned to reaping a return on its investments – particularly in people – and commonly regards developers as interchangeable. +开源招聘面临的最大挑战之一是开源项目超越了公司界限。开发人员首先专注于他们的项目,并且可以轻松地在不同雇主之间移动,受聘工作在相同的开源项目上。 -### A new hiring philosophy +这反映了开发者参与开源贡献的动机。金钱或特定的职位并不是最终目标。他们的职业道路是流动的,对专业发展和个人成就的持续追求在驱动着它,这被Fournier称为“尊重”,而被Osier-Mixon称为“认可”。根据最新的开源工作报告,开源开发人员表示,工作中最好的事情是有机会参与到有趣的项目里、与全球社区合作,并解决前沿技术挑战。 -It’s important to turn this thinking on its head by understanding that open source developers contribute to your company’s success at multiple levels. They contribute on the company’s behalf to outside projects that you consider strategic to your business strategy and product development. And they contribute to your own open source projects. +一个流动的劳动力池也是在开放式工作中的自然结果。贡献者的工作非常可见,不仅对项目中的人员,而且对潜在的雇主也是的。他们将贡献者的GitHub活动视为公开简历。这对作为招聘人员的你是有利的,但同时也对作为雇主的你是不利的。 -Attracting and retaining developers to your open source projects is equally important to doing so for employment at your company. The goal is to maintain and nourish each project’s commercial ecosystem which just happens to exist both inside and outside your company. +> “对于招聘人事部和工程部门来说,当他们在招聘时,开源变成了一把双刃剑。你希望自己的组织成为这么地方,人们在那里,自由开发并且愿意为开源做出贡献,以便提升个人自身价值。通常公司的反对意见是‘如果他们变得如此吸引人,他们就会被挖走。’我的回应是——是的,绝对是的——这就是为什么拥有一个他们愿意继续工作的开放文化是如此关键。” — [Guy Martin](https://www.linkedin.com/in/guywmartin/),Autodesk的开放总监(Open@ADSK) -Cannibalizing the open source community for the sake of adding talent to your payroll is self-defeating. Yet, recruiting from open source communities is often a necessity because that is where one finds experienced developers for that project. The key is in supporting their work within and without company boundaries. +这种现实通常让更加结构化的企业世界感到不安,他们更擅长获取对其投资的回报,特别是在人员方面投资回报。他们通常将开发人员视为可以互换的。 -> “We really want to make sure that the top contributors in the world are contributing to our projects. If they work for us that’s great. If they're working for somebody else that’s also great because when we work together as a project the success of the project is our shared success.” – [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), Senior Director of Open Source at Oath (Yahoo + AOL) +### 一种新的招聘理念 -This shift in philosophy around talent acquisition and retention is part of the culture shift that happens within an organization when it undergoes open source transformation. +重要的是要颠覆这种思维方式,认识到开源开发人员在多个层面上为公司的成功做出了贡献。代表着公司,他们为你的业务战略和产品开发中至关重要的外部项目做出贡献。同时,他们也为你自己的开源项目做出了贡献。 -Perhaps the biggest surprise to employers is that the unique nature of open source developers and their movement between companies in a single project is as beneficial to their various employers as it is to the developers. +吸引和留住开发人员参与你的开源项目,与在你的公司就业同样重要。目标是维护和培育每个项目的商业生态系统,这个生态系统恰好在你的公司内部和外部都存在。 -> “In the Yocto Project, several developers and at least two members of the governance have worked on YP from more than one company. Because of this, they tend to be much more focused on the project’s value to the rest of the world, as opposed to making a product valuable to the company who makes it in a proprietary environment.” – [Jeff Osier-Mixon](https://www.linkedin.com/in/jefro/), Open Source Community Manager at Intel Corporation +把人才招聘到公司因而消耗开源社区的人才资源其实是自毁的行为。但是,从开源社区招募人才通常也是必要的,因为那里才能找到为该项目提供有经验的开发人员。关键在于在如何在公司边界内外支持他们的工作。 -## When to recruit vs. train +> “我们真的希望确保世界顶级的贡献者为我们的项目做出贡献。如果他们为我们工作,那很棒。如果他们为其他公司工作,那也很好,因为当我们共同为一个项目工作时,项目的成功就是我们共同的成功。” — [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/),Oath(雅虎 + 雅虎通)的开源高级总监 -Your hiring and retention strategy is most meaningful to your company and its developers when it addresses both internal and external talent. But this guide is focused on strategies for recruiting developers that you employ. +这种在人才获取和留存方面的理念转变,是组织在进行开源转型时,发生文化转变的一部分。 -Different companies incorporate the ebb and flow of developers coming and leaving their employ into their hiring and retention strategies in different ways. For example, some companies offer more training and project exposure in order to attract more developers, while others prefer a less structured approach to developer support. +也许对雇主来说最大的惊喜是,开源开发人员的独特性以及他们在一个项目中的不同公司之间流动特性,如给他们本身同样带来益处,也给不同的雇主受益匪浅。 -> “We try to hire people with experience in open source. So we do more occasional course-correction than we do formal training in open source processes. However, all developers run into open source questions. Were motivated to help them succeed because their success is our success. We're here to help the projects as well as the people on the projects.” – [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), Senior Director of Open Source at Oath (Yahoo + AOL) +> “在Yocto项目中,有几位开发人员和至少两位治理成员曾经在多家公司为YP工作过。因此,他们更加关注项目对世界其他地方的价值,而不是将产品在专有环境中的价值归于制造它的公司。” — [Jeff Osier-Mixon](https://www.linkedin.com/in/jefro/),英特尔公司的开源社区经理 -Regardless of your strategy, there are two basic approaches to building open source talent within your organization: Recruit and train. +## 何时进行招聘而不是培训 -### Recruit established developers +当你的招聘和留聘策略同时解决了内部和外部人才问题时,它是对公司和开发人员都最有意义的。但是本指南着重于你的雇用策略,以便招聘你想的人才。 -Recruiting established developers must be part of your plan. It takes time for any developer to establish relationships in a project and gain influence. But on projects your company deems critical, any delays in effecting project direction can lead to some serious issues in the project’s usability in an employer’s internal projects. +不同的公司以不同的方式将开发人员的流动纳入其招聘和留职策略中。例如,一些公司提供更多的培训和项目经验,以吸引更多的开发人员,而另一些公司则更倾向于不太结构化组织方式支持开发人员。 -If you're trying to quickly gain influence in an open source community where the developers you employ haven’t contributed, or don’t have much sway, hiring someone who is already skilled and influential in that project may be your only option to meet an immediate need. +> “我们试图招聘有开源经验的人。因此,我们更多地进行偶尔的纠正,而不是进行正式的开源流程培训。然而,所有的开发人员都会遇到开源问题。我们的动机是帮助他们成功,因为他们的成功也是我们的成功。我们在这里既要帮助项目,也要帮助项目中的人员。” — Gil Yehuda,Oath(雅虎 + 雅虎通)的开源高级总监 -> “Domain expertise and leadership in open source can sometimes take quite a long time at established companies. You need to put training together and start working with people in the company to begin to groom them for that kind of leadership. But, sometimes initially you've got to bootstrap by hiring people who are already leaders in those communities.” – [Guy Martin](https://www.linkedin.com/in/guywmartin/), Director of Open at Autodesk (Open@ADSK) +无论你的策略是什么,构建组织内的开源人才有两种基本方法:招聘和培训。 -Or maybe you already employ a top developer on a key project, who then moves on to another opportunity and there isn’t sufficient time available to groom someone to take their place. Remember that influence follows the person, and not the company they work for. +### 招聘已经具备经验的开发人员 -Experienced open source developers can also help to develop your internal open source culture and open source community leadership. A smart strategy identifies all the benefits you're looking to gain from hiring top talent, and includes tactics for meeting those needs. +招募具备经验的开发人员必须成为你的计划的一部分。任何开发人员都需要时间在项目里建立关系和获得影响力。但是在公司认为关键的项目上,任何项目方向受到延迟影响都可能导致该项目在雇主内部对应项目的可用性出现严重问题。 -Many hiring managers say successful recruiting is anchored more to word of mouth than to marketing. While traditional recruiters are still used, human resources and recruiting teams are looking beyond the traditional places for developers. Best practices include searching projects on GitHub and projects that your company already uses to find and approach top contributors who may be interested in a new opportunity or who can suggest someone who is. +如果你想在一个开源社区中快速获得影响力,而你雇用的开发人员尚未做出贡献,或者没有太大的影响力,那么雇佣一个在该项目中已经具备技能和影响力的人可能是你唯一的选择,以满足及时需求。 -Once you've identified great or even good developers working internally or externally in project communities that are important to you, ask for their wish list of co-workers and target those people for recruitment too. +> “在成熟的公司中,开源的领域专业知识和领导力有时需要相当长的时间才能获得。你需要组织培训,并开始与公司内的人员合作,开始培养他们成为那种领导人。但是,有时你必须通过雇佣那些已经是这些社区的先锋人来启动。” — [Guy Martin](https://www.linkedin.com/in/guywmartin/),Autodesk公司的开放总监(Open@ADSK) -### Train developers on open source +或者也许你已经雇用了一个关键项目的顶尖开发人员,但他们又找到了另一个机会,而没有足够的时间来培养其他人来接替他们的位置。记住,影响力跟随着人,而不是他们所在公司。 -Companies are often frustrated in their efforts to recruit top open source developers mostly because there are so few available and they're all in high demand. But there are other reasons companies have trouble recruiting established open source developers. A company that’s new to open source may have less appeal, for example. +经验丰富的开源开发人员还可以帮助发展你内部的开源文化和开源社区领导力。一个明智的策略可以甄别出你想从雇佣顶尖人才中获得的所有好处,并包含满足这些需求的策略。 -In the ongoing search for some relief from the talent shortage, employers turn to growing their own talent pool internally. Certainly, training programs are crucial in filling skill gaps and grooming candidates for succession plans should you lose key developers. Training is also a welcomed perk for developers seeking to improve their skills in open source. +许多招聘经理表示,成功的招聘更多地依赖口碑而不是营销。虽然仍然使用传统的招聘人员,但人力资源和招聘团队正在超越传统的招聘渠道来寻找开发人员。最佳实践包括在GitHub上搜索项目和公司已经使用的项目,以找到并接触可能对新机会感兴趣的顶级贡献者,或者能够推荐适合的人选。 -Developers who are users or consumers of a project, are the logical candidates for the next generation of maintainers. But you will also want to spend time training developers who show an interest or eagerness in contributing to open source. It pays to cultivate this next level of developers and include them in the open source decision-making process. +一旦你确定了那些社区项目中对你重要的开发人员,不论是内部的还是外部的,就询问他们对同事的愿望清单,并将愿望清单里的这些人列为招聘目标。 -Developers gain respect and recognition through their technical contributions to open source projects and their leadership in open source communities. But those are not the only places they can build serious cred. +### 培训开发人员参与开源 -Working alongside great developers in high-visibility positions and projects is a big score, too. Such opportunities are a top draw at companies where very experienced, well known, and talented engineers are plentiful. +公司在招募顶尖开源开发人员方面通常感到沮丧,主要是因为这样的开发人员数量太少,而且他们都被高度需求。但是公司在招募已经成熟开源开发人员时遇到困难还有其他原因。例如,对于刚刚接触开源的公司,他们可能缺乏吸引力。 -**Informal, on-the-job training** with top developers can be kickstarted or supplemented by more formal programs as well. +在持续寻求缓解人才短缺的过程中,雇主们将目光转向内部培养自己的人才库。培训计划无疑既填补技能差距又培养候选人,以便在重要开发人员离职时有成功继任计划。它是两者中至关重要的一环。对于那些希望提升开源技能的开发人员来说,培训也是一个受欢迎的福利。 -**Mentorships** are a good way to build in more structure, without too much additional overhead. Senior and more experienced developers help junior and less experienced ones in resolving technical problems as needed and aid with training in open source methodology and open source culture. +那些作为项目的用户或消费者的开发人员,是下一代维护者的合适候选人。但你也应该花时间培训那些对参与开源贡献表现出兴趣或热情的开发人员。培养这一级别的开发人员并将他们纳入开源决策过程是值得的。 -**Apprenticeships** up the ante a bit with more structured, daily training exposure with top developers in closer supervision. +开发人员通过他们对开源项目的技术贡献以及他们在开源社区中的领导地位获得尊重和认可。但这并不是他们建立严肃信誉的唯一途径。 -**8 Steps to Open Source Development Impact in and for Your Enterprise** +在高可见度的职位和项目中,与顶尖开发人员共事也是一个重要的机会。在那些拥有经验丰富、知名度高和才华横溢工程师的公司,这样的机会有最大的吸引力。 -1. Hire key developers and maintainers from the open source projects that are important to you. -2. Allow your developers working on products to spend a certain % of their time contributing upstream. -3. Set up a mentorship program where senior and more experienced developers guide junior, less experienced ones. -4. Develop and offer both technical and open source methodology training to your developers. -5. Participate in open source events. Send your developers and support them in presenting their work. -6. Provide proper IT infrastructure that will allow your developers to communicate and work with the global open source community without any challenges. -7. Set up an internal system to track the contributions of your developers and measure their impact. -8. Internally, plan on contributing and focus on areas that are useful to more than one business unit/product line. +与顶尖开发人员进行的**非正式的在职培训**可以通过更正式的培训计划来加强或补充。 -## Five strategies for recruiting open source developers +**导师制度** 是一种很好的方法,可以增加更多的组织结构,而不需要太多额外的开销。资深和经验丰富的开发人员帮助初级和经验较少的开发人员解决技术问题,并协助他们在开源方法和开源文化方面进行培训。 -Participating in open source communities is the first, and most important thing you can do to attract open source developers. This is how your organization gains visibility, and credibility, in open source communities. +**学徒制度**稍微加大了投入,通过与顶尖开发人员进行更有结构的、每日的培训接触,并在更密切的监督下进行。 -But the most effective recruitment strategies aim toward a more complete open source transformation by adopting the tools, practices, and culture that open source developers are familiar with and desire. +**在企业内对开源开发有影响的8个步骤** -> “A lot of how you recruit should center on thinking consciously about how you change the perception of the open source community on what your company is about.” – [Guy Martin](https://www.linkedin.com/in/guywmartin/), Director of Open at Autodesk (Open@ADSK) +1. 从对你重要的开源项目中招聘关键开发人员和维护者。 +2. 允许你的开发人员在产品开发中花费一定百分比的时间向上游做出贡献。 +3. 设立导师计划,让资深和经验丰富的开发人员指导初级和经验较少的开发人员。 +4. 为你的开发人员提供技术和开源方法论培训。 +5. 参加开源活动。派遣你的开发人员,并支持他们展示他们的工作。 +6. 提供适当的IT基础设施,使你的开发人员能够与全球开源社区进行沟通和合作,没有任何障碍。 +7. 建立一个内部系统,跟踪你的开发人员的贡献并衡量他们的影响。 +8. 在内部,计划参与贡献,并关注对多个业务单位/产品线有用的领域。 -> “When companies establish open source practices they send a big message saying that we're serious about open source and that we want to invest in it.” – [Nithya Ruff](https://twitter.com/nithyaruff), Senior Director Open Source Practice at Comcast +## 招聘开源开发人员的五种策略 -Showcasing the work your company is doing in its own open source projects is vitally important since developers cite their ability to work on interesting projects as the most effective way that recruiters can get their attention. +参与开源社区是吸引开源开发人员的第一要素,也是最重要的事情。这是你的组织在开源社区中获得可见度和信誉的途径。 -Taken as a whole, these five key strategies will not only help with hiring and retaining talented developers, but also help support your overall investment in open source for business strategy. +但最有效的招聘策略是朝着更完整的开源转型方向努力,采用开源开发人员熟悉并期望的工具、实践和文化。 -### 1. Participate and grow leadership in open source projects +> “你招聘的很多方式都应该集中在有意识地思考如何改变开源社区对你公司的认知。” — [Guy Martin](https://www.linkedin.com/in/guywmartin/),Autodesk公司的开放总监(Open@ADSK) -**Take a strategic approach.** Target projects your company works with now and/or may soon. Joining and/or increasing current participation in open source projects makes your company more visible and more attractive to developers who are already skilled and working in that space. Recruiting from this group can result in a mutually perfect match. +> “当公司建立开源实践时,他们传递了一个重要的信息,表明我们对开源非常认真,并且我们希望在其中投资。” — [Nithya Ruff](https://twitter.com/nithyaruff),Comcast公司的开源实践高级总监 -Participating in projects that match your future needs may help you get ahead in acquiring talent for your next projects. For example, lots of companies are investing in cloud based technologies, high-scale data analytics, and machine learning, If you want to attract developers in those areas, you’ll want to position your company as a meaningful participant in those open source ecosystems now. +展示公司在自己的开源项目中所做的工作非常重要,因为开发人员表示,能够参与有趣的项目是招聘人员吸引他们注意力的最有效方式。 -> “You can’t throw a stone more than five feet in cloud and not hit something that’s in open source. We absolutely have to have open source talent in the company to drive what we're trying to do moving forward.” – [Guy Martin](https://www.linkedin.com/in/guywmartin/), Director of Open at Autodesk (Open@ADSK) +总的来说,这五种关键策略不仅有助于招聘和留住有才华的开发人员,还有助于支持你在业务战略中对开源的整体投资。 -The situation is similar in high-scale big data analytics. For example, Hadoop, the centerpiece of the big data revolution, and something Yahoo knows a lot about given its role in helping birth it. Yahoo, now a part of Oath, is renowned for its work in other high-scale computing projects, and attracts developers who are interested in developing their big data skills. +### 1. 参与并在开源项目中培养领导力 -Companies can attract developers who are looking to up their game in a particular technology by establishing themselves as a desirable destination for open source developers. Startups, even those in stealth mode, can work on public open source projects to establish their cred and influence and attract talent even before they reveal their product offering. Developers have choices in open source, so you need to make your company attractive for the talent to apply. +**采取战略性方案** 瞄准你的公司目前正在使用或可能很快会使用的项目。加入并/或增加对开源项目的当前参与度,使你的公司在这些已经在该领域具备了技能并正在工作的开发人员眼中更加可见和有吸引力。从这个群体中招聘可以实现双方的完美匹配。 -Participating in open source projects takes a good understanding of community dynamics and a bit of experience. Influential maintainers in open source communities have those skills and use them well. Recruiting them, if you can, will help you build your internal open source culture and attract other top-notch developers. You’ll also want to learn from these skilled developers and develop internal guidance so that you can help other open source developers you hire or train to succeed in becoming influential in open source communities too. +参与符合你未来需求的项目可能有助于在获取下一个项目的人才方面处于领先地位。例如,许多公司正在投资云技术、大规模数据分析和机器学习,如果你想吸引那些领域的开发人员,你需要现在就将你的公司定位为,这些开源生态系统中的有意义参与者。 -> “For those who have never really worked on open source projects or with open source communities, we help them through the process of understanding all the things they shouldn’t do, all the things that can get them in trouble legally and communally, and all the things they should do, like how to work with people at other companies who are working on the same project but with slightly different goals, basically how to manage an external community.” – [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/), Senior Director of Open Source at Oath (Yahoo + AOL) +> “你不能扔一块超过5英尺远的石头,却不能在开源领域里什么都没砸到。我们公司绝对必须拥有开源人才,来推动我们未来的发展。” — [Guy Martin](https://www.linkedin.com/in/guywmartin/),Autodesk公司的开放总监(Open@ADSK) +> -Earning respect and building leadership as a corporate participant in open source takes more than one person. To pass the test of time, your company will need to show real commitment beyond one person’s own passion. Your single most passionate open source leader could leave at any time, and you'd have to start over from scratch. So make it a team priority to get involved and stay involved as a company. +在高规模大数据分析领域的情况也类似。例如,Hadoop是大数据革命的核心,对于这一领域,雅虎拥有丰富的经验,因为它在帮助催生这一技术中扮演了重要角色。雅虎因其在其他高规模计算项目中的工作而闻名,现在是Oath的一部分了,并吸引了那些对发展大数据技能感兴趣的开发人员。 -**Contribute meaningfully.** This means you need to commit to contributing significant work rather than just going through the paces. Connecting their open source contributions to their work deliverables rather than letting it be a job perk will keep your developers’ focused on work, while earning them recognition in the community and attracting more developers to your company at the same time. The good news is that your contributions also steer the open source projects in the direction your company needs. Not only does this help your developers gain visibility and attract more talent, you are helping ensure that the open source projects you rely upon will support your future technical direction. That’s the beauty of open source. +通过给开源开发人员建立一个理想的目的地,公司能够吸引那些希望在特定技术领域提升自己的开发人员。初创公司,即使是处于隐秘模式的公司,也可以在公开的开源项目上开展工作,以建立自己的信誉和影响力,甚至在揭示产品之前吸引人才。在开源中,开发人员有多种选择,因此你需要使你的公司对人才具有吸引力。 -**Pay developers to contribute and set aside time to work on open source.** Because your success is tied directly to the success of projects and developers, the best strategy is to ensure the success of all by making time for contributions a job priority. Be specific and nail the time availability down. Guy Martin says he and Ibrahim Haddad, back when they started the open source group at Samsung, “were jokingly called the 50% tyrants” because of their strict enforcement of developers spending 50% of their paid working hours on upstream contributions. Yes, it’s that important. Schedule time for it accordingly. +参与开源项目需要对社区动态有良好的理解和一些经验。在开源社区中具有影响力的维护者具备这些技能,并且能够善加利用。如果可能的话,招募他们将有助于建立你内部的开源文化,并吸引到其他顶尖开发人员。你也想向这些有经验的开发人员学习,并制定内部指导,以便你能够帮助你雇佣或培训其他开源开发人员,成功使他们成为开源社区中的重要人物。 -**Open source your own code, create small pilot projects, and iterate on success.** In order to have influence in shaping a project, you must build leadership. In order to build leadership, you must lead by example. You lead and build trust by making your own code open source, creating small pilot projects and iterating on your successes. If your code and projects are interesting, they’ll attract developers to your company on their own. Even if your code and projects aren’t quite the stuff of legends, you earn a following by proving your worth to the community overall. +> “对于那些从未真正参与过开源项目或与开源社区合作过的人,我们帮助他们了解所有不应该做的事情,所有可能在法律和社区方面给他们带来麻烦的事情,以及所有应该做的事情,比如如何与其他公司的人合作,他们正在开发同一项目,但目标略有不同,基本上是如何管理外部社区。” — [Gil Yehuda](https://www.linkedin.com/in/gilyehuda/),Oath(雅虎 + AOL)公司的开源高级总监 -> “If you are a company like Salesforce, it’s not always obvious to engineers why they might want to work for your company. They don’t use your product, and they don’t necessarily see what you do, but they take a look at your open source projects and say ‘Hey, it looks like this company is actually involved in a lot of really neat stuff.’ It’s kind of a window for them to see the great engineering that’s going on inside of the company that they otherwise wouldn’t be able to see.” – [Ian Varley](https://www.linkedin.com/in/ianvarley/), Software Architect at Salesforce +在开源社区中作为企业参与者,赢得尊重和建立领导地位需要的人远多于一个。为了能经受住时间的考验,你的公司需要展现出超越个人热情的真正承诺。你唯一最热情的开源领导者随时可能离开,一旦离开,你就必须从零开始。因此,将参与开源作为团队优先事项并且是公司级别地持久做下去。 -### 2. Create an internal open source culture. +**有意义地做出贡献。** 这意味着你需要承诺做出重要的工作,而不仅仅是敷衍了事。将他们的开源贡献与工作成果联系起来,而不是让它成为一种工作福利。这将使你的开发人员专注于工作,同时在社区中赢得认可,并吸引更多开发人员加入你的公司。好消息是,你的贡献也引导着开源项目朝着你公司需要的方向发展。这不仅帮助你的开发人员获得更多的关注并为公司吸引更多的人才,还帮助确保你依赖的开源项目将支持你未来的技术方向。这就是开源的美妙之处。 -**Tools and practices.** An open source culture can feel alien to the corporate world, but efforts to build it are not futile. In the corporate world, project teams are not usually open to allowing developers from other teams contribute code since it can disrupt their development cadence. Open source projects are usually more receptive to outside help and manage two versions of their code, one that is more stable and one that is open to constant activity. If you can adapt your projects to the open source processes internally, you’ll be able to succeed in external open source projects, where that flexibility is a must. +**为开发人员提供报酬并留出时间来参与开源项目**。 因为你的成功直接与项目和开发人员的成功相关联,所以最好的策略是通过把留出贡献时间作为第一要务,来确保所有的成功。要具体并确切地确定时间可用性。Guy Martin说,他和Ibrahim Haddad在他们创立三星的开源团队时,“曾被戏称为50%的专制者”,因为他们严格执行开发人员将50%的工作时间用于上游贡献。是的,这是非常重要的。相应地安排时间。 -The tools open source developers use are different, too, and generally require a different infrastructure or platform. Developing an IT infrastructure that enables developers to communicate and work with the global open source community without any bottlenecks or problems is an important first step. Collaboration is at the heart of all things open source. -**Incentives and rewards.** As mentioned earlier in this guide, open source developers are motivated by rewards, respect, and purpose. A competitive salary will get them in the door, but to retain them, make sure they are recognized for their contributions to open source. +**开源你自己的代码,创建小型试点项目,并在成功的基础上进行迭代。** 要在塑造项目方面产生影响力,你必须建立领导力。为了建立领导力,你必须以身作则。通过使自己的代码开源、创建小型试点项目并在成功的基础上进行迭代,你领导并建立信任。如果你的代码和项目有趣,它们将自动吸引开发人员来到你的公司。即使你的代码和项目还不是传奇般的存在,通过向整个社区证明自己的价值,你也会赢得追随者。 -This respect should be earned, but once achieved, it must be consistently present. You’ll want to build that into your recruitment and retention strategy. Since word of mouth is key to recruitment, this is a good place to fan all the goodness developers will talk about amongst themselves. -Last but not least, as Camille Fournier said in her talk, “ship often.” Open source developers like to see their work in production, to feel the thrill of finishing something and marking it done. Build your strategy and processes so that developers have a purpose and can see the effects of their work often. Mix challenging work with less taxing work to prevent exhaustion but keep interest high at the same time. +> "如果你是像Salesforce这样的公司,工程师们为什么要来你公司工作并不总是显而易见。他们不使用你的产品,也不一定了解你的业务,但他们看到你的开源项目,会说‘嘿,看起来这个公司实际上参与了很多非常棒的工作。’ 这对他们来说是一个窗口,让他们看到公司内部正在进行的出色工程,否则他们可能看不到。” — [Ian Varley](https://www.linkedin.com/in/ianvarley/),Salesforce的软件架构师 -### 3. Attend and support open source events +### 2. 创建内部开源文化。 -**Send developers to present at conferences and events.** While there is no doubt that good code and community leadership builds a reputation that attracts talent, recruitment efforts must go beyond this level of developer engagement. Ask good developers in the company to attract more good developers through strategic networking, speaking engagements at conferences, and collaborating with others on open source projects. +**工具和实践。** 开源文化在企业世界中可能感觉陌生,但努力构建它并非徒劳无功。在企业世界中,项目团队通常不愿意允许来自其他团队的开发人员贡献代码,因为这可能会干扰他们的开发节奏。而开源项目通常更愿意接受外部帮助,并管理两个版本的代码,一个是更稳定的版本,另一个是开放给持续活动的版本。如果你能够在内部调整你的项目以适应开源流程,那么你就能够在外部的开源项目中取得成功,而在那里这种灵活性是必不可少的。 -Much like you train developers to code in public, help them present in public. They can use the event to test an idea and to announce a new open source project. The people they meet will be more likely to adopt your projects if they hear about them from the developers who wrote the code. This way, you can attract future contributors and future new hires. +开源开发人员使用的工具也不同,并且通常需要不同的基础设施或平台。开发一个能够让开发人员与全球开源社区进行沟通和合作而没有瓶颈和问题的IT基础设施是重要的第一步。协作是所有开源事务的核心。 -**Sponsor and/or set up a booth at open source events.** Developers come to conferences to hear about new developments, interesting projects, and cool companies. Since they're all ears, shouldn’t you pick up the megaphone? Sponsoring an event and setting up a booth are two ways to clearly showcase your company, its support of the open source community, and developer opportunities to the very people you hope to recruit. +**激励和奖励。** 正如本指南前面提到的,开源开发人员受到奖励、尊重和目标的激励。有竞争力的薪水能够吸引他们进入公司,但为了留住他们,请确保认可他们在开源项目中的贡献。 -**Host a hackathon.** By all accounts, challenging projects are the top attraction for highly skilled, experienced open source developers. Hackathons are fun challenges packed with rewards (be those cash prizes or bragging rights), so they're a perfect addition to your recruitment efforts. Besides, you have the added benefit of evaluating their work first hand. +这种尊重应该是通过努力赢得的,但一旦获得,就必须始终如一地存在。你会希望将这一点纳入你的招聘和留任策略中。口口相传对于招聘至关重要,开源是一个很好的地方,激励着开发人员之间互相交流一切好处。 -### 4. Incorporate open source into job descriptions +最后但同样重要的是,正如Camille Fournier在她的演讲中所说,“经常发布”。开源开发人员喜欢看到他们的工作投入到生产中,感受到完成某事并将其标记为完成的激动。制定你的策略和流程,让开发人员有一个目标,并经常看到他们工作的效果。在挑战性工作和较轻松的工作之间进行混合,以防止筋疲力尽,但同时保持高度的兴趣。 -Open source is at the heart of almost all technologies now, therefore it should be a part of most technology job descriptions. Tell prospective candidates if the role expects them to contribute to or manage open source projects. +### 3. 参加并支持开源活动 -These days, many developers are looking to build their open source skills. They’ll want jobs that give them experience, or that leverage the experience they already have. Show them you are serious about open source and you’ll get people who can help maintain, contribute to, or even be committers on your most important projects. If the role has an open source element to it, say so upfront. Given that so much technology is based on open source these days, most of your tech roles should have something about open source in it. +**派遣开发人员到各类会议和活动做演讲。** 尽管毫无疑问,优秀的代码和社区领导力可以建立声誉,吸引人才,但招聘工作必须超越开发人员项目深入的水平。我们还需要邀请公司中的优秀开发人员通过战略性的人脉网络、在会议上的演讲以及与他人合作的开源项目来吸引更多优秀的开发人员。 -### 5. Invest in training – build talent from within +就像你训练开发人员在公共场合编码一样,也请帮助他们在公共场合做演讲。他们可以利用活动来测试一个想法并宣布一个新的开源项目。如果人们能从编写代码的开发人员那里听到有关项目的信息,那么他们更有可能采用你的项目。这样,你就可以吸引未来的贡献者和未来的新员工。 -Given the growing shortage of experienced open source developers, you’ll need to invest in training programs to strengthen and update the skills of in-house talent. You’ll also want to use training to proactively groom successors for key project contributors so natural attrition and turnover doesn’t harm your company. +**赞助并/或在开源活动上设立展台。** 开发人员参加会议是为了了解新的发展、有趣的项目和酷炫的公司。既然他们洗耳恭听,你为什么不大声宣传呢?赞助一个活动并设立展台表达了两种目的:一向你希望招聘的人清楚地展示你的公司,二是它对开源社区的支持以及给到开发人员机会。 -There are a variety of ways to incorporate training programs, from offering sessions designed to address specific open source concerns, such as license compliance, contribution processes and code mirroring, to apprenticeships where developers work alongside more experienced open source developers, to mentorships that provide help on sticky communal problems. You can structure any of these formally or informally. Either way, it’s important to have ongoing training programs always in place. -For additional ideas on recruiting and retention strategies, see the predecessor to this guide, [How to Recruit and Hire Open Source Developers](https://www.linux.com/publications/how-recruit-and-hire-open-source-developers) from 2015. +**举办黑客马拉松。** 从各方面来看,具有挑战性的项目是吸引高技能、经验丰富的开源开发人员的最主要因素。黑客马拉松是充满有趣的挑战并带有奖励(无论是现金奖还是炫耀权),因此它们是你招聘工作的完美补充。此外,你还可以通过这种方式直接评估他们的工作。 -## Acknowledgements +### 4. 将开源纳入工作描述中 -Contributors: +开源现在几乎是所有技术的核心,因此它应该是大多数技术工作描述的一部分。如果这个角色期望他们贡献或管理开源项目,请告诉潜在候选人这点。 -* Jeff Olser-Mixon, Open Source Community Manager (Intel Corporation) -* Gil Yehuda, Senior Director, Open Source (Oath) -* Guy Martin, Director, Open at Autodesk (Autodesk) -* Nithya Ruff, Senior Director, Open Source Practice (Comcast) -* Ian Varley, Software Architect (Salesforce) +如今,许多开发人员希望建立自己的开源技能。他们希望能够在工作中获得经验,或者利用他们已经拥有的经验。向他们展示你对开源的认真态度,你将吸引人才来帮助维护、工作在你的项目上,甚至成为你最重要项目的贡献者。如果这个角色涉及到开源方面,那么请提前说明。鉴于如今许多技术都基于开源,你大部分的技术职位都应该涉及到开源内容。 + +### 5. 投资培训 - 从内部培养人才 + +鉴于经验丰富的开源开发人员日益短缺,你需要投资培训项目,以加强和更新内部人才的技能。你还需要利用培训积极地培养关键项目贡献者的接班人,这样自然的离职和人员流动就不会对你的公司造成损害。 + +有多种方式可以纳入培训计划,从提供旨在解决特定开源问题的课程,例如许可合规性、贡献流程和代码镜像,到与经验丰富的开源开发人员并肩工作的学徒制,再到为解决共同问题提供帮助的导师制。你可以组织任何形式的,正式或非正式的。无论采取何种方式,重要的是要始终保持持续的培训计划。 + +对于招聘和留住开源开发人员的额外策略,了解2015年的指南[《如何招募和聘请开源开发人员》](https://www.linux.com/publications/how-recruit-and-hire-open-source-developers)。 + +## 致谢 + +贡献者: + +- Jeff Olser-Mixon,开源社区经理(英特尔公司) +- Gil Yehuda,高级总监,开源(Oath) +- Guy Martin,开放主任(Autodesk) +- Nithya Ruff,高级总监,开源实践(Comcast) +- Ian Varley,软件架构师(Salesforce) \ No newline at end of file diff --git a/content/zh-CN/guides/shutting-down.md b/content/zh-CN/guides/shutting-down.md index 0d9ceeef..ff93a511 100644 --- a/content/zh-CN/guides/shutting-down.md +++ b/content/zh-CN/guides/shutting-down.md @@ -1,157 +1,165 @@ --- -title: Shutting down an open source project +title: 关闭开源项目 --- -This Open Source Guide is designed to offer advice about how your enterprise and your development team can plan for the day when you are ready to end or move away from an unneeded open source project. By shutting down the project gracefully or by transitioning it to others who can continue the work, your enterprise can responsibly oversee the life cycle of the effort. In this way, you can also set proper expectations for users, ensure that long-term project code dependencies are supported, and preserve your company’s reputation within the open source community as a responsible participant. +该开源指南旨在为你的企业和开发团队提供当你准备要关闭或退出一个不再需要的开源项目时的建议。通过得体地关闭项目或将项目转移给可继续贡献的其他人,你的企业可以负责地管理项目的的生命周期。这样,你还可以为项目用户设立恰当的期望,确保长期的项目代码依赖能够得到支持,并保护你的公司在开源社区中负责任的参与者的形象。 -This guide will help you decide when a project is no longer useful, understand how to disengage from a project, and determine what to do about its code, repositories, websites, wikis, and other project assets as you head in a new direction. +该指南将帮助你判断何时一个开源项目不再有用,以及当你转向其它新方向时,了解如何从一个项目中脱离,该如何处理该项目的代码、代码仓、网站、wiki和其他项目资产。 -## Lifecycle planning for your open source project -As software developers start to envision and develop new and needed business-critical open source projects, they should also incorporate clear and specific plans for each project’s complete life cycle, from its birth to its eventual demise. Such planning should also be conducted as part of a company’s overall open source strategy, incorporating all of the projects it oversees. +## 开源项目的生命周期规划 -These efforts could mean planning for a future shuttering of a project, a transfer of its operations to another interested group of users, or a corporate pull-out from the initiative. Such end-of-life planning is part of the responsibility that enterprises have for projects, their users, and for the open source community that sustains it all. These plans are necessary to allow such transitions to be conducted gracefully for other users if a project is ended or transferred. +当软件开发人员开始设想和开发新的、关键业务所需的开源项目时,他们还应该为每个项目的整个生命周期(从其诞生到最终消亡)制定清晰而具体的规划。这样的规划也应该作为公司整体开源战略的一部分,纳入其管理的所有项目。 -### Why life cycle planning is important +这些规划可能是计划未来关闭一个项目,将项目运营转移给另一个感兴趣的用户组,或公司退出项目。这样的生命周期结束计划是企业对项目、用户和支撑这一切的开源社区所负责任的一部分。这些规划也是必要的,从而当一个项目被结束或转移时,能够得体地为其他用户完成这种过渡。 -Planning for the potential end of an open source project isn’t unique. Similar life cycle planning is done for proprietary software initiatives, IT systems hardware deployments, and a wide range of other business decisions. For an open source initiative, project life cycle planning could include the traditional life cycle evaluations, such as an outline of the project’s scope and vision and estimates for its growth, as well as open source-specific categories like planning for community building and early user adoption and incorporating user feedback and contributions. +### 为什么生命周期规划很重要 -It’s natural for any project to undergo development slowdowns or for user adoption to peak and then decline. Even highly successful open source projects may eventually stop being useful to their creators or users as business plans change or new technologies and innovations replace them. Thus, an exit plan is critical to ensure a smooth transition. +为一个开源项目的可能的终结来做规划并不独特。类似的生命周期规划也适用于专有软件,IT系统硬件部署以及其他广泛的业务决策。对于一个开源项目,项目生命周期规划可以包括传统的生命周期评估,例如项目范围和愿景的概述以及对其增长的估计,以及开源特殊的条目,例如社区建设和早期用户应用计划、并纳入用户的反馈和贡献。 -## What does a dead open source project look like? +任何项目都会经历开发速度放缓或用户使用达到峰值然后下降,这是很自然的。即使是非常成功的开源项目,最终也可能因为商业计划的改变或新技术/创新的取代而对其创建者或用户不再有用。因此,退出计划对于确保平稳过渡至关重要。 -If the steady flow of contributions or commits to your open source project has fallen off, that doesn’t necessarily mean a project is dead. It may simply mean that the project is mature, has achieved its development goals, and is serving its users without requiring much upkeep or updating, which could be a good thing. -On the other hand, if the number of people adopting the project and using the code has declined significantly, that could be a sign that interest is waning and the project may be dying. Other relevant metrics can include the level of project activity in general and whether users are posting inquiries and joining online discussions about the code. +## 一个死掉的开源项目是什么样的? -### Trouble signs to watch for +如果对你的开源项目的稳定的贡献流或提交流减少了,这并不一定意味着项目已死亡。它可能仅仅意味着该项目已经成熟,已经实现了它的开发目标,并且在不需要太多维护或更新的情况下就可为其用户服务,这可能是一件好事。 -A dead or dying project can also be indicated by problems, such as unresolved differences about the direction of development or through lost energy from formerly involved contributors, who may have moved on to other projects that better capture their interest. An obvious sign is a decline in the project that coincides with members of your team or the community asking questions about whether it should continue, be ended, or left outright. Another indicator is that the code is no longer being patched or updated by the community to resolve vulnerabilities. +相反,如果采用该项目和使用代码的人数显著下降,这可能表明兴趣正在减弱,项目可能正在消亡。相关指标可以包括项目活动的总体水平,以及用户是否发布查询并加入有关代码的在线讨论。 -> “If you don’t have anybody asking questions, if nobody’s making contributions, if there doesn’t seem to be any new adoptions, nobody seems to be adding dependencies, and if you're not seeing any other signs the people are using it, that’s a potential big warning sign. It may all be fine, but it’s worth checking to see if the project is dying.” – Dr. David A. Wheeler, open source expert and lead for two projects with The Linux Foundation’s [Core Infrastructure Initiative](https://www.coreinfrastructure.org/) (CII) +### 需关注的问题标志 -These signs can be tricky to gauge even with hard data, since your code often may be accessed indirectly through package managers for other applications, rather than via direct downloads. This can make it hard to know exactly how many users you have and can accurately track as a project goes through its life cycle. +一个已死或垂死的项目可以通过一些问题来识别,例如关于开发方向的未解决分歧,或者由于以前参与的贡献者失去了精力,这些贡献者可能已经转移到了更好地吸引他们兴趣的其它项目上。一个明显的标志是项目的衰退,同时你的团队或社区的成员也在询问项目是否应该继续、是否应该结束或彻底放弃。另一个标志是社区不再修补或更新代码以解决漏洞。 -## Why plan for the end of a project before you even launch it? +>“如果你没有任何人提出问题,如果没有人做出贡献,如果没有任何新的采用,似乎没有人添加依赖,如果你没有看到任何其他任命正在使用它的迹象,这就是一个潜在的重大警告信号。可能一切都很好,但是有必要检查项目是否正在消亡。”– David A. Wheeler博士,开源专家,Linux基金会[核心基础设施计划(CII)](https://www.coreinfrastructure.org/) 中两个项目的牵头人。 -As you plan your open source project, related decisions about how you might someday end or transition the project are a critical part of the project’s life cycle. +这些迹象可能很难衡量,即使是有定量的数据,因为你的代码往往能被间接地访问(通过其他应用的包管理器),而不是直接下载。这使得很难确切地知道项目到底有多少用户,进而准确地跟踪项目的生命周期。 -Why is that? Because pulling out of a project without a plan to protect its community and users can substantially harm an organization’s reputation within the open source community and the project itself. If you manage an open source software project, remember that others depend on it and that their continued use of it depends in part on your management and administrative efforts. Certainly your company can choose to change a project’s direction or status, but part of your responsibility is to clearly, quickly, and openly communicate such changes to a project’s users so they can plan for their own needs. It would be irresponsible to close a project and take down its code without communicating those intentions to users. -### Protect your company’s reputation +## 为什么要在启动一个项目之前就计划结束它? -Leaving other users in a lurch is not something you want to do. In the world of open source, this issue should not be taken lightly. That doesn’t mean your potential exit plans need to be made in detail even before you get the project underway, but frequent, open communication will help assure users that you will not drop a project without adequate notice and that you will work to prevent users from being left hanging. In addition, by building, developing, and promoting code that is easily forkable, your project can offer flexible transfer capabilities to others if you should decide to end your own involvement in the project. Although you need not announce a full disengagement procedure in your life cycle plans, you can still let users know that you intend to close or transition the project smoothly and responsibly. +当你规划您的开源项目时,关于你可能有一天如何结束或转移项目的相关策略是项目生命周期的关键部分。 -### Seek a diverse contributor base +为什么会这样?因为在没有保护社区和用户的计划的情况下退出一个项目会严重损害一个组织在开源社区和项目本身的声誉。 +如果您管理一个开源项目,请记住其他人依赖于它,他们对它的持续使用部分取决于您的管理和运营工作。当然,你的公司可以选择改变项目的方向或状态,但你的部分责任是清晰、快速和公开地将这些改变传达给该项目的用户,以便他们能够根据自己的需求进行计划。不将这些意图传达给用户直接关闭项目并删除其代码是不负责任的。 -Having a diverse group of code contributors is important to help your project grow by bringing in new ideas, deeper problem-solving capabilities, and more developer eyes on the code. It’s also helpful later if you decide to end or leave your project. With a diverse community involved in the effort, you could have have interested community members who potentially want to maintain it, broadening your options for future transition. If you do decide to leave a project, you would likely prefer to hand it off to other people who care about and will continue it, rather than announce its demise. +### 保护您公司的声誉 -These early steps lay the groundwork for project success by establishing a level of trust that will allow a healthy ecosystem and commercial dependencies to be built around your project. +让其他用户陷入困境绝不是你想做的事情。在开源的世界里,这个问题不应该掉以轻心。这并不意味着你的潜在退出计划需要在项目开始之前就进行详细的制定,但频繁的、开放的沟通将有助于向用户保证,你不会在没有充分通知的情况下放弃项目,并且你将努力防止用户被搁置晾起来。此外,通过构建、开发和推广易于Fork的代码,即使你决定结束自己在项目中的参与,你的项目也可以向其他人提供灵活的转移功能。尽管你不需要在生命周期规划中宣布完整的退出程序,但你仍然可以让用户知道您打算以平稳和负责任的方式关闭或过渡项目。 -> “When you're starting your project, you're trying to get people to trust you and allay their fears about joining the project and using your code. Later, if you say, ‘Hey, this project’s going to go away soon,’ that is not going to help with trust. Instead, you should say you're going to do your best to make it work out if it will ever be ended, and that you promise not to just drop users. Tell them you’ll let them know what is happening at each step. Give them time to transition, and work on ways to help with the transition. That can be very helpful.” – Dr. David A. Wheeler, open source expert and lead for two projects with The Linux Foundation’s [Core Infrastructure Initiative](https://www.coreinfrastructure.org/) (CII) +### 寻求多元化的贡献者基础 -## Deciding when to end, transfer or pull out of a project +拥有一个多样化的代码贡献者群体对于通过引入新的想法、更深入的解决问题的能力和更多的开发人员关注代码来帮助项目发展非常重要。如果你决定结束或离开您的项目,多样化的贡献者群体也是很有帮助的。有了多元化的社区参与这项工作,你可能会有感兴趣的社区成员,他们可能希望维护项目,从而拓宽你未来迁移的选择。如果你确实决定要离开一个项目,你可能更愿意把它交给其他关心并将继续它的人,而不是宣布它的消亡。 -Whatever the reason, there may come to decide whether an open source project should be ended or transferred to another entity or whether your enterprise should end its participation in the project. It could be because your business goals have changed and that the project no longer corresponds with your new direction. Or, maybe it’s because a key person or team that headed the effort leaves the company, or that project performance metrics such as participation, updates, and usage are declining drastically based on your latest user data. It’s also possible that disagreements have arisen among community members about the future of the project and it looks like changes may be needed. +这些早期步骤,通过建立允许围绕您的项目建立健康的生态系统和商业依赖的信任,为项目成功奠定了基础。 -### Disagreements can influence new project directions +>“当你开始你的项目时,你试图让人们信任你,并消除他们对加入项目和使用你的代码的恐惧。后来,如果你说‘嘿,这个项目很快就会结束’,这对建立信任没有任何帮助。相反,你应该说如果项目需要结束时,你会尽你最大的努力让它能够平滑过渡并且你保证不会直接抛下用户。告诉他们,你会让他们知道每一步都发生了什么。给他们过渡的时间,并研究帮助他们过渡的方法。这可能是非常有帮助的。”– David A. Wheeler博士,开源专家,Linux基金会[核心基础设施计划(CII)](https://www.coreinfrastructure.org/) 中两个项目的牵头人。 -If disagreements have arisen about the project inside the community – whether about its scope, technical matters, licensing or other issues – then you might consider splitting the project to allow interested parties to pursue what’s important to them. A similar quandary helped inspire developer Linus Torvalds to create Linux back in 1991. Torvalds had been experimenting with Minix, a small UNIX-like operating system kernel developed by Andrew S. Tanenbaum to teach college students about coding. Torvalds created Linux after he decided Minix had a radically different scope and vision, leaving him to create his own separate operating system. -The scope of projects can certainly change over time and be readjusted as needed, but if it the project is simply no longer needed, then it can be a candidate for dissolution or transfer. Projects can even be repurposed to either find a way to make your existing users happy or to incorporate a functionality that needs new users. Ultimately, however, if you have software and nobody needs it, then the project is probably finished. Even if it’s the best software in the world, if nobody needs that capability, then nobody cares. +## 决定何时结束、转移或退出项目 -> “That definitely does happen in different ways. We could stop using the project and its code because we just moved on to other things, or maybe the people who are maintaining it are now working on different things or have even left Facebook. Maybe nobody’s there supporting it and we're also not using it in our own apps. Some projects are contained enough that they're basically done being used.” – Christine Abernathy, Open Source Team Developer Advocate at Facebook +无论什么原因,都可能会需要决定一个开源项目是否应该结束或转移到另一个实体、或你的企业是否应该结束参与该项目。这可能是因为你的业务目标已经改变,项目不再符合你的新方向。或者,也许是因为领导这项工作的关键人物或团队离开了公司,或者根据你的最新用户数据,项目性能指标(如参与度,更新和使用情况)急剧下降。社区成员之间也可能对项目的未来产生分歧,并且看起来可能需要进行调整。 -### Examples from the user trenches +### 分歧会影响新的项目方向 -For business users, a wide range of factors affect decisions on whether open source projects should be ended. At software maker Autodesk, where some 190 open source projects are homegrown and in use, declining participation in a project’s development is seen as a clear indicator of code that might be past its prime, which can lead to placing a formerly thriving project into “maintenance mode.” Under that designation, the code is no longer actively maintained and if users have questions they may or may not be answered. In such a case, community members of the project can still use it, but no community support is provided. +如果社区内部对项目产生了分歧——无论是关于项目的范围、技术问题、许可证还是其它问题——那么你可以考虑将项目拆分,让感兴趣的各方追求对他们重要的东西。类似的困境激发开发者Linus Torvalds的灵感在1991年创建了Linux。Torvalds一直在试验Minix,这是一个小型的类UNIX操作系统内核,由Andrew S. Tanenbaum开发,用来教大学生编码。Torvalds在他认定Minix具有完全不同的范围和愿景后创建了Linux,他创建了自己独立的操作系统。 -Similar usage indicators, including patch and maintenance requests, are monitored at Facebook, where some 400 open source projects have been homegrown so far, to periodically review the fates of ongoing projects. And at Capital One, where about 20 open source projects have been started in-house and are in use, projects are regularly transferred to other organizations or shut down depending on the needs of the company. +项目的范围当然可以随着时间的推移而改变,并根据需要重新调整,但如果项目只是不再被需要,那么它可以成为解散或转移的候选对象。项目甚至可以重新调整用途,要么找到让现有用户满意的方法,要么融入需要新用户的功能。然而,最终,如果你有软件而没有人需要它,那么项目很可能就结束了。即使它是世界上最好的软件,但如果没有人需要这种功能,那么也没有人在乎。 -## How to end an open source project +>“这肯定是以不同的方式发生的。我们可以停止使用这个项目和它的代码,因为我将开始做其它事情,或维护它的人现在正在做不同的事情,甚至已经离开了Facebook。也许那里没有人支持它,而我们也没有在我们自己的应用中使用它。有些项目已经包含了足够的内容,以至于它们基本上已经被使用了。-Christine Abernathy,Facebook开源团队开发者布道师 -Whatever you do to end or transfer an open source project, perhaps the most important move you can make is to be candid with users at every step. Being open about your intentions helps establish trust for future work with all potential developer communities. +### 来自用户的示例 -Once you've decided to make the move, you must determine whether to end it, transfer it to another organization, or just pull out and end your direct involvement. +对于商业用户来说,广泛的因素会影响是否应该终止开源项目的决策。在软件制造商Autodesk,大约有190个开源项目在自己开发和使用中,对项目的开发参与度下降被视为代码可能已过其黄金时期的一个明确指标,这可能导致将一个以前蓬勃发展的项目被置于“维护模式”。在这个模式下,代码不再被主动维护,如果用户有问题,他们可能会得到或可能不会得到回答。在这种情况下,社区成员仍然可以使用项目,但社区支持不在被提供。 -### How transfers can be helpful +类似的使用指标,包括补丁和维护请求,也在Facebook进行监控,到目前为止Facebook已经自行开发了大约400个开源项目,以定期审视这些项目的命运。而在Capital One,大约有20个开源项目已经在内部启动并正在使用,项目会根据公司的需要定期转移到其他组织或关闭。 -By transferring the project to another organization that wants to continue to maintain it, you can then directly assist in the transition of the project’s data and other resources. This approach can help reduce the worry and risks of the existing community and its users. If the project has used common or standard interfaces, it will likely be easier to extract and move embedded data or replace it with another similar component if needed. That won’t always work, of course, because clearly some open source projects are unique. However, providing and using standardized interfaces early in the project life cycle can help make these transition efforts easier. -> “The best practice is to just be upfront and clear with the state of your projects. If you're no longer supporting a project, or you're in the process of winding it down, make that painfully obvious to anybody that would stumble across your code. You want them to see it’s no longer being maintained so new users don’t start using it and have this unwritten expectation that it is out there and that you are sponsoring this project and developing it.'” – Jared Smith, Open Source Community Manager at Capital One +## 如何结束一个开源项目 -### Make needed updates when transferring projects +无论你做什么来结束或转移一个开源项目,也许你能做出的最重要的举动是在每一步都对用户坦诚相待。对你的意图持开放态度有助于与所有潜在的开发者社区建立未来工作的信任。 -Transferring a project has the added benefit of continuing to make the code available to other users, long after it was first created and nurtured by its original development community. Of course, more than just code will be affected. There’s also the documentation, Contributor License Agreements (CLAs), the project repository, wikis, websites to transfer, as well as some potential support infrastructure which will need to be reviewed and updated. Transfers can be done through an actual transfer procedure or by forwarding the project domains and other resources to a new user group. +一旦你决定采取行动,你必须决定是否结束项目,把它转移到另一个组织,还是直接退出项目并结束你的直接参与。 -In lieu of transferral, the project can be moved to a new host home and accessed by sending community members to a referral site where it is continued, rather than completely disengaging from it. +### 如何让转移有帮助 -> “It doesn’t happen all the time, but in the past with one of our projects we moved it over to a different company. We don’t have any hard and fast rules about doing this. Typically, we’ll just move it to a different organization. When it comes to moving within groups, we sort of shop around internally and find out whether it is still being used by someone. With our open source projects, we strive toward internal adoption. So, it might be used by an entirely different team. If they are willing to maintain it, then we move it to a different team, and that’s very easy. That just means changing a label somewhere where it says who’s the owner.” – Christine Abernathy, Open Source Team Developer Advocate at Facebook +通过将项目转移到另一个希望继续维护项目的组织,你可以直接协助项目的数据和其他资源的转移。这种方法有助于减少现有社区及其用户的担忧和风险。如果项目使用了通用或标准接口,则提取和移动嵌入的数据或在需要时用另一个类似的组件替换将更容易。当然,这并不总是行得通,因为显然一些开源项目是独一无二的。但是,在项目生命周期的早期提供和使用标准化的接口有助于使这些转移工作变得更容易。 -### Killing a project outright +>“最好的做法是事先清楚地了解项目的状态。如果你不再支持一个项目,或者你正在结束它,让那些无意中发现你的代码的人痛苦地看到这一点。你想让他们看到你的代码不再被维护,这样新用户就不会开始使用它,也不会有这种不成文的期望,那就是你在赞助这个项目并开发它。”–Jared Smith,Capital One开源社区经理 -Some organizations may simply want to kill an outdated project and retire its efforts for a myriad of reasons, from legal concerns to competitive pressures. The direction your enterprise ultimately takes is up to you. In this case, the code doesn’t need to be removed but can instead be archived, or made “read-only,” so it may still be used by others to fork it into new projects without your involvement. It can also be moved to an archiving site where it can be stored for users. +### 在转移项目时做必要的更新 -It’s important to always remember that just because your company doesn’t care about the code anymore it doesn’t mean that the existing community doesn’t care. It behooves you, then, to remind them as you proceed that they can fork the code and create their own uses for it without you. This also wouldn’t be a bad time to remind users who depend upon the open source code in your projects that they would be wise to mirror and save the code on their own for projects that are very important to them. Code can disappear over time and a good backup or mirror can be critical for users. +转让一个项目还有一个额外的好处,那就是在它最初被最初的开发社区创建和培育之后很久,仍然可以继续向其他用户提供代码。当然,受影响的不仅仅是代码。还有文档、贡献者许可协议(CLA)、项目仓库、wiki、网站转移,以及一些潜在的基础设施支撑需要被审视和更新。转移可以通过实际的转移程序来完成,也可以通过将项目的域和其它资源转给新的用户组来完成。 -To make whichever option you choose work efficiently, a step-by-step disengagement plan is a good idea to keep it all organized. That means clear and early communications with users who are likely to care as well as a sufficient timeline that gives affected users time to finish their work and move to an alternate platform if needed. How much time will be enough for users? It depends. Start with at least six months, or it could be longer. The key is to set reasonable expectations and communicate your plans very clearly and quite often. +与完全解散项目不同,转移意味着项目可以被转移到一个新的宿主家,并通过将社区成员送到项目将会被继续的转接站来继续访问。 -If your enterprise transfers the project to another group, the users should be kept up to date on what is being done to protect their interests as well. +>“这并不总是发生,但在过去我们的一个项目中,我们将它转移到了另一家公司。我们对此没有任何硬性规定。通常情况下,我们只是将它转移到另一个组织。当涉及到在集团内转移时,我们在内部货比三家来寻找是否有人还在使用它。在我们的开源项目中,我们努力争取内部采用。因此,它可能被一个完全不同的团队使用。如果他们愿意维护它,我们就把它转移到这个团队,这很简单,只需要在某个地方改变一个标签,上面写着谁是责任人。”—— Christine Abernathy,Facebook开源团队开发者布道师 -### Work toward a smooth transition +### 直接杀死一个项目 -When a workable partner is secured, then approach your project disengagement like you would handle any product that is being discontinued. Decide what, if any, involvement your organization will have with the project going forward in terms of developer time and then work closely with the new entity to prepare for a smooth transition. Be sure to set expectations that the actual transfer could take months to accomplish, and then turn the project over officially to the new owners when all the needed steps are completed. +一些组织可能只是想扼杀一个过时的项目并停止投入,原因有很多,从法律问题到竞争压力。你的企业最终采取的方向取决于你。在这种情况下,代码不需要被删除,而是可以被归档,或者被设置为“只读”,这样即使没有你的参与,它也仍然可以被其他人使用来fork到新项目中。也可以将其移动到一个为用户存出的存档站点。 -A potential problem that could crop up, though, is if the group which is interested in taking over your old project is not one you favor to operate it into the future. This can happen, and you will have to come up with a plan for action in such a case. How do you deal with this? Well, if you're so attached to your code that you are considering not transferring it to a group that is not exactly in line with your corporate or philosophical directions, then maybe it’s not the right time to end the project. If you care about it that much, perhaps there’s a reason that you shouldn’t be leaving this project. +重要的是要始终记住,仅仅因为你的公司不再关心代码,并不意味着现有的社区不关心。那么,你应该在进行时提醒社区,他们可以在没有你的情况下fork代码并为其创建自己的用途。这也是提醒那些依赖你项目中的开源代码的用户,他们最好自己镜像和保存对于对他们非常重要的项目代码。代码可能会随着时间的推移而消失,一个好的备份或镜像对用户来说是至关重要的。 -### The importance of clear communications +为了使你选择的任何一个选项都能有效地工作,一个循序渐进的退出计划是一个很好的主意,以使一切都有条理。这意味着与可能关心的用户进行清晰和早期的沟通,以及一个能预留充足的时间让受影响的用户能完成他们的工作甚至在需要时转移到其它替代平台的时间表。对于用户来说多少时间才够用呢?这要看具体情况。从至少六个月开始,也可能更长。关键是要设定合理的预期,并且非常清楚、非常频繁地传达你的计划。 -Clearly communicating the new direction of the transferred, ended, or rebranded project will continue to be your responsibility even after the transition. Be sure to openly advise developers and community members about the status of the project with its new operators and give them clear details about how the project is now being maintained if they care to continue to use it. Don’t forget to update your project website, social media channels, and other connected community assets so participants know where to find the moved project and can continue to make their contributions and use the code. +如果你的企业将项目转移给另一个团队,也应该让用户了解为了保护他们的利益正在做的事情的最新情况。 -Remember to communicate all this information to downstream organizations and users as well. This includes companies, non-profits, and others that are using your code, and who may not be aware of the demise or transfer of the project because they're not directly involved in the development cycle. You should make efforts to advise them of what is happening through your websites, social media channels, and other outlets, especially if the project is well-known and has had a substantial following. +### 努力实现平滑转移 -> “The biggest thing is to communicate the changes and tell the community of the plans ASAP. Don’t leave the users wondering if the project is still being maintained. For the most part, good code lives on, in my opinion, so if you've got a project that has good code, I would rather not ever take something down from GitHub but set the expectations at, ‘Hey, this project is no longer being actively maintained.’” – Guy Martin, Director of Open at Autodesk +当找到一个可行的合作伙伴时,就像处理任何停产的产品一样处理你的项目退出。决定在开发者时间方面,您的组织将参与项目推进的哪些(如果有的话),然后与新实体密切地配合,为项目的平滑转移做好准备。 +一定要设定实际移交可能需要几个月才能完成的预期,然后在完成所有必要的步骤后,将项目正式移交给新的负责方。 -### Provide updates through project repositories +一个潜在的问题可能会突然出现,即如果有兴趣接管你的旧项目的团队并不是你喜欢的未来运营它的团队。这种情况很可能会发生,在这种情况下,你必须想出一个行动计划。你怎么应对这类情况呢?好吧,如果你对你的代码如此执着,以至于你正在考虑不把它转移给一个与你的公司或哲学方向不完全一致的小组,那么也许现在并不是结束项目的正确时机。如果你那么在乎它,也许有你不应该离开这个项目的原因。 -Another important place to post information about project changes is the project’s repository itself on GitHub or related destinations. There you can place detailed notes explaining what’s happening, including readme files to help get the messages to participants. +### 清晰沟通的重要性 -As the project moves on, it’s time to officially transfer the assets, if necessary, to its new operators. If you are bringing in new administrators while maintaining the actual assets within your existing company, you can keep the copyrights on the affected code and let them use it with the open source licenses of their choice. +即使在移交完成后,明确传达项目的新方向(转移、结束或更名)仍将是您的责任。请务必公开告知开发者和社区成员项目的状态及新的责任方,并向他们提供清楚的关于项目现在是如何维护的细节,如果他们愿意继续使用它。不要忘记更新你的项目网站、社交媒体渠道和其他连接的社区资产,以便参与者知道在哪里可以找到被迁移的项目,并可以继续做出贡献并使用代码。 -To keep the project repositories well organized, you might consider setting up a designated area where you can store and make available all transitioned open source projects that your company no longer supports (e.g., https://github.com/twitter-archive). In this way, the projects are still available for users to get code, and potential users can also still find readme files explaining the status of the projects. This designated section of the repository can provide clarity for users and help them understand the difference between active and retired projects, while also ensuring that enterprises can properly showcase their latest live open source projects in their active repositories. +记住,也要将所有这些信息传达给下游组织和用户。这包括公司、非营利组织和其他使用你的代码的人,他们可能不知道项目的消亡或转移,因为他们不直接参与开发周期。你应该努力通过你的网站、社交媒体渠道和其他渠道告知他们正在发生的事情,特别是如果项目是众所周知的并且有大量的追随者。 -### Archiving tips +>“最重要的是尽快沟通变更并将计划告诉社区。不要让用户怀疑项目是否还在维护。在我看来,大多数情况下好的代码可以存活的,所以如果你的项目有好的代码,我宁愿永远不要从GitHub上取下一些东西,而是将期望设置为“嘿,这个项目不再被积极地维护”。”—— Guy Martin,Autodesk开源负责人 -Several steps are involved in archiving a project. For example, moving it to a read-only status helps make it clear, without having to change any URLs, that the project is now archived and no longer open to regular updates in its previous form. +### 通过项目仓库提供更新 -Also important is to provide users with a clear alternative plan for their projects, including how to get and fork the code for their ongoing uses. As part of that responsibility, you should provide users with a way to contact you so they can have their fork listed and made available to other interested users. Some companies provide this assistance, while other choose not to do so. +发布项目变更信息的另一个重要位置是项目在GitHub或相关平台上的项目仓库。在那里,你可以放置详细的记录来解释发生了什么,包括readme文件来帮助将信息传达给社区参与者。 -Once a repository is archived, you cannot add or remove collaborators or teams, and issues become read-only. To make changes in an archived repository, you must unarchive the repository first. See the GitHub documentation for more details: [https://help.github.com/articles/about-archiving-repositories/](https://help.github.com/articles/about-archiving-repositories/) +随着项目的推进,如果有必要,是时候将资产正式转让给新的运营方了。如果你正在引入新的管理员,同时还维护你目前公司中的实际资产,你可以保留受影响代码的版权,并让他们使用他们选择的开源许可证。 -### Infrastructure updates when shuttering projects +为了保持项目仓库的良好运作,你可以考虑建立一个指定的区域,在那里你可以存储和提供哪些你的公司不再支持的所有已移交的开源项目(例如 https://github.com/twitter-archive))。通过这种方式,用户仍然可以获取那些项目的代码,潜在用户也仍然可以找到解释项目状态的readme文件。项目仓库的这一指定部分可以为用户提供清晰的信息,并帮助他们了解活跃项目和已归档项目之间的区别,同时也确保企业可以在其活跃的项目仓库中正确地展示其最新的活跃开源项目。 -Ending a project can also affect your project’s infrastructure and support, which must be judged on a case-by-case basis, depending on how your project was set up. Some projects use and maintain only a small set of code, so there might not be much to do. If it is all code and it’s posted on your repository, then you're probably done and need not take additional steps to transfer or secure it. +### 归档技巧 -Other projects, however, may require significant effort to shutter them using various backend tools to do the work. These may include services that may have been shared for many purposes, such as a test infrastructure. Although that test infrastructure has been used for the project previously, you may want to remove it before transferring the code so you can use the tool to test other work later. It may be hard to disentangle, but it can be done if desired. +归档项目涉及到几个步骤。例如,将其移动到只读状态有助于清晰的呈现项目现在已归档、不再像以前那样定期地更新,而且无需更改任何URL。 -> “Companies really **need to do** a better job of succession planning in open source. Just throwing something out there without proper planning and getting people from outside the company to become contributors and then expecting that it’s going to be that way forever is a challenge. You need to prepare that members of the community, whether they're from your company or from other places, are going to come in and follow somewhat of a life cycle and eventually, people become elders or retired from a community, and you need to have succession planning for that.” – Guy Martin, Director of Open at Autodesk +同样重要的是为用户们提供提供一个清晰的项目替代计划,包括如何获取和fork他们正在使用的代码。作为该职责的一部分,你应该为用户提供一种与你联系的方式,以便他们可以将其fork列出并提供给其他感兴趣的用户。一些公司提供这种援助,而另一些公司选择不这样做。 -### Have a tough skin +一旦一个仓库被归档,就无法添加或删除协作者或团队,Issue问题将变为只读。要在归档的仓库中进行更改,必须先取消归档该仓库。有关更多详细信息,请参阅GitHub文档:[https://help.github.com/articles/about-archiving-repositories/](https://help.github.com/articles/about-archiving-repositories/) -There may also be some negative public comments and reactions posted about your actions, including unhappy users or “trolls” who disparage your move as abandoning users. Remember, however, most users are aware that priorities change over time and that enterprises might eventually have to stop some open source projects as their work matures. Every company must do this sometimes, so don’t take the comments too personally. +### 关闭项目时更新基础设施 -## Final thoughts +结束一个项目也会影响你的项目的基础设施和支持,这必须根据你的项目是如何建立的具体情况来判断。有些项目只使用和维护一小撮代码,因此可能没有太多的工作可做。如果它是所有代码并且已发布在您的仓库中,那么你可能已经完成了并不需要采取额外的步骤来转移或保护它。 -Shuttering, transferring, or leaving an open source project is inevitably a step your enterprise will choose to take at some point, but it need not be a debilitating task. With proper planning, clear and widespread communications and the step-by-step completion of legal and procedural tasks, transitioning an open source project can be accomplished satisfactorily for all involved. +然而,其他项目可能需要花费大量的精力来使用各种后端工具来完成工作。这些可能包括可能出于多种目的而共享的服务,例如测试基础设施。 -By developing and including simple plans to shutter an open source project even as you begin planning a fledgling project’s first steps, you will ensure a healthy life cycle management plan. These plans will help your open source projects run as efficiently and successfully as possible from their lofty starts to their eventual quieter endings. +尽管该测试基础结构之前已用于项目,但您可能希望在传输代码之前将其删除,以便稍后可以使用该工具测试其他工作。这可能很难解开,但如果需要的话,是可以做到的。 -## Acknowledgements +>“公司真的**非常需要**在开源项目中执行更好的继任计划。在没有适当规划的情况下把一些东西扔到那里,让公司外部的人成为贡献者,然后期望它将永远这样是一个挑战。你需要让社区成员做好准备,不管他们是来自你的公司还是来自其他地方。他们会进入并遵循一定的生命周期,最终,人们会年老或从社区退出,你需要为此制定继任计划。”—— Guy Martin,Autodesk开源负责人 -Contributors to this guide: -* [Christine Abernathy](https://twitter.com/abernathyca), Open Source Team Developer Advocate at Facebook -* [Chris Aniszczyk](https://twitter.com/cra), CTO of CNCF (former head of open source at Twitter) -* [Guy Martin](https://twitter.com/guyma), Director of Open at Autodesk -* Jared Smith, Open Source Community Manager at Capital One -* [Dr. David A. Wheeler](https://www.dwheeler.com/), open source expert and lead for two projects with The Linux Foundation’s Core Infrastructure Initiative (CII) +### 有钝感力 + +也可能会有一些负面的公众评论和反馈,包括不开心的用户或“键盘侠”们会贬低你的举动是抛弃用户。但是,请记住,大多数用户都意识到优先级会随着时间的推移而变化,并且随着开源项目的成熟企业最终可能不得不停止一些项目。每个公司都有必须这样做的时候,所以不要太在意别人的评论。 + +## 结束语 + +关闭、转移或退出一个开源项目是你的企业在某个时候不可避免地要采取的一个步骤,但它不一定是一个令人烦恼的任务。通过恰当的计划,清晰和广泛的沟通以及逐步完成法律和程序任务,可以实现项目的平滑过渡并让涉及的各方都满意。通过开发和制定一个关闭开源项目的简单计划(甚至在你开始计划一个新生项目的第一步时就考虑),你将确保一个健康的生命周期管理计划。这些计划将帮助你的开源项目尽可能高效和成功地运行,从它们的崇高的开始到最终的安静结束。 + +## 致谢 + +本指南的贡献者: + +* [Christine Abernathy](https://twitter.com/abernathyca),Facebook开源团队开发者布道师 +* [Chris Aniszczyk](https://twitter.com/cra),CNCF基金会CTO(前Twitter开源负责人) +* [Guy Martin](https://twitter.com/guyma),Open at Autodesk开源负责人 +* Jared Smith,Capital One开源社区经理 +* [David A. Wheeler博士](https://www.dwheeler.com/),开源专家,Linux基金会核心基础设施计划(CII)中两个项目的牵头人 diff --git a/content/zh-CN/guides/strategy.md b/content/zh-CN/guides/strategy.md index f7f7f1c7..218756f1 100644 --- a/content/zh-CN/guides/strategy.md +++ b/content/zh-CN/guides/strategy.md @@ -1,270 +1,288 @@ --- -title: Setting an Open Source Strategy +title: 制定开源战略 --- -# Setting an Open Source Strategy +# 制定开源战略 -The majority of companies that use open source do not necessarily understand the benefits to their organization and do not have a strategy aligned with their business needs. Furthermore, only about half of these companies report practicing basic open source management, such as community development, code maintenance, and the like, according to the latest [Future of Open Source survey](https://www.slideshare.net/blackducksoftware/2016-future-of-open-source-survey-results). +大多数使用开源的公司不一定了解开源对其组织的好处,也并没有与其业务需求一致的战略。此外,根据最新的[开源的未来调查](https://www.slideshare.net/blackducksoftware/2016-future-of-open-source-survey-results),这些公司中只有大约一半声明在实践基本的开源管理,例如社区开发,代码维护等。 -Creating and documenting an open source strategy is an essential first step to realizing ROI with open source as open source can have a positive or negative effect across several dimensions related to an organization: strategic/business, operational, technological and financial. Your open source strategy connects the plans for managing, participating in, and creating open source software with the business objectives that the plans serve. This can open up many opportunities and catalyze innovation. +创建和记录开源战略是实现开源投资回报比(ROI)的重要第一步,因为开源可以在与组织相关的多个方面产生积极或消极的影响:战略/业务,运营,技术和财务。你的开源战略可以将管理、参与和创建开源软件的计划与其所服务的业务目标关联起来。这可以开放许多机会并促进创新。 -## Why create a business strategy? +## 为什么要创建开源战略? -Formalizing your organization’s approach to open source management and strategy creates guidelines that boost efficiency and minimize risks. Whether or not you have set a business strategy around your open source efforts, you likely already know that this is important. +正规化你的组织在开源管理及战略的方式,从而创建提升效率和最小化风险的指导原则。无论你是否已经围绕你的开源工作制定了相应的业务战略,您很可能已经知道这一点非常重要。 -The critical first step in increasing your open source investment is to create a strategy document that involves defining what open source means to your organization and creating a shared taxonomy. This will help you maximize the benefits your organization gets from open source, while keeping you out of trouble that can arise from mistakes such as picking the wrong licenses or failing to maintain code properly. Your strategy document can: +增加开源投资的关键第一步是创建一个战略文档,其中包括定义开源对您的组织意味着什么,并创建一个共享的分类。这将帮助您最大限度地利用您的组织从开源中获得的好处,同时让你远离可能因错误(如选择错误的许可证或未能正确维护代码)而引起的麻烦。您的开源战略文档可以: -* Get leaders excited and involved -* Obtain buy-in at various levels within the company, especially at executive level -* Facilitate decision-making in diffuse, multi-departmental organizations -* Help individuals and inventors make better decisions -* Help build a healthy community around inventions -* Explain your company’s approach to open source and business models and support of its use -* Clarify where your company invests in community-driven, external R&D and where your company will focus on its value added differentiation +* 让领导层兴奋并参与进来 +* 获得公司的各个层面,特别是高层的认同 +* 促进分散的多部门组织的决策 +* 帮助个人和创造者做出更好的决策 +* 帮助围绕创造构建一个健康的社区 +* 阐释你的公司参与开源的方式及商业模式,以及对其使用的支持 +* 明确你的公司在哪些方面投资于社区驱动、外部研发,以及将侧重于哪些方面的增值差异化 -> "If you do not start with that high-level consensus, driving agreement on the details of the policy and on investments in the process tends to be very hard, if not impossible."* *- *Ibrahim Haddad, Vice President of R&D and the Head of the Open Source Lab at Samsung, in his book[ Open Source Compliance in the Enterprise](https://www.linuxfoundation.org/publications/open-source-compliance-enterprise/)[.](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/) +> “如果你不从高层的共识开始,推动达成关于策略和投资细节的共识这一过程就会变得非常困难,如果不是不可能的话。”.**-*Ibrahim Haddad,三星研发副总裁兼开源实验室负责人在他的书 [《企业中的开源合规](https://www.linuxfoundation.org/publications/open-source-compliance-enterprise/)[》](https://www.linuxfoundation.org/compliance-and-security/2018/12/open-source-compliance-in-the-enterprise/) 中提到。 -## Your open source strategy document +## 你的开源战略文档 -Let’s start with the end goal first, and then explain how to get there. Your goal is to detail your open source strategy in a document that everyone from engineering and legal, to marketing and the C-suite can reference. This strategy document will help your team understand the business objectives behind your open source program, ensure better decision-making, and minimize risks. +让我们先从最终目标开始,然后解释如何实现目标。你的目标是在一个文档中详细说明你的开源战略,从而能让不同角色的每个人(从研发、法务,到营销和管理高层CXO)都可以参考。本战略文档将帮助您的团队了解您的开源项目背后的业务目标,确保更好的决策,并将风险降至最低。 -> "At Salesforce, we have internal documents that we circulate to our engineering team, providing strategic guidance and encouragement around open source. These encourage the creation and use of open source, letting them know in no uncertain terms that the strategic leaders at the company are fully behind it. Additionally, if there are certain kinds of licenses we don't want engineers using, or other open source guidelines for them, our internal documents need to be explicit."* – [Ian Varley](https://www.linkedin.com/in/ianvarley/), Software Architect at Salesforce. +>“在Salesforce,我们向我们的研发团队分发内部文档,提供关于开源的战略指导和导向。这些导向鼓励开源的创建和使用,让他们毫不含糊地知道,且公司的战略领导者完全支持它。此外,如果我们不希望研发人员使用某些类型的开源许可证,或有其它的一些开源指南,都需要在我们的内部文档中明确。” —— [Ian Varley](https://www.linkedin.com/in/ianvarley/), Salesforce的软件架构师。 -At a minimum, the document should: +文档中至少应: -* Explain your company’s approach to open source and the purpose behind the document. What does success look like for your company and what’s the role of open source in achieving that? +* 说明贵公司的开源路线以及文档背后的目的。对于您的公司来说,成功是什么样子的?开源在实现这一目标中的作用是什么? -> "In Autodesk's case, the reason behind our new open source approach was to make a move to cloud technologies because of how we're shifting our product focus to integrate even more closely in a cloud environment. The realization follows that if you go to cloud, basically all of that's built on open source, so you've got to ramp up your open source strategy."* - [Guy Martin](https://www.linkedin.com/in/guywmartin/), director of Open at [Autodesk](https://autodesk.github.io) (Open@ADSK). +>“在Autodesk的案例中,我们新的开源路线背后的原因是向云技术转移,因为我们正在转移我们的产品重点,以便在云环境中进行更紧密的集成。如果你转向云,基本上所有这些都是基于开源的,因此你必须加强你的开源战略。” —— [Guy Martin](https://www.linkin.com/in/guywmartin/),[Autodesk](https://autodesk.github.io)的开源负责人(Open@ADSK)。 -* Specify how you want developers to consume open source **code**: - * What if code comes into one of your products from a project with a different licensing setup? - * What acceptance, rejection, and exception policies should developers follow? - * What is your organization’s overall stance toward open source development? - * A good strategy document provides explicit answers to these kinds of questions. -* Specify how you want developers to contribute code to open source projects, **and identify projects that are critical to your business strategy**. (And encourage them to contribute!) - * What if a developer wants to contribute code from one open source project to the one you are working on but the two projects have different licenses? - * How can your contributions to open source serve a virtuous cycle, so that your projects benefit from contributions in turn? These considerations are part of defining strategic contributions. + +* 指定你希望开发人员如何使用开源**代码**: + * 如果代码从具有不同的开源许可证的项目进入到你的某个产品中,该怎么办? + * 开发人员应该遵循哪些接受、拒绝和例外策略? + * 你的组织对开源的总体立场是什么? + * 一个好的策略文档可以为这些问题提供明确的答案。 + +* 指定您希望开发人员如何为开源项目贡献代码,**确定对您的业务战略至关重要的项目**。(并鼓励他们贡献!) + * 如果开发人员想将一个开源项目的代码贡献到你正在投入的开源项目中,但这两个项目的开源许可证不同,该怎么办? + * 你对开源的贡献如何实现良性循环,从而让你的项目能从贡献中受益?这些考虑是定义战略性贡献的一部分。 -> "If you are relying on an open source project heavily for your product and you don't have a seat at the table in terms of leadership and strategy for that project, your business is at risk." - Guy Martin, Autodesk. +>“如果你的产品严重依赖某个开源项目,而您在该项目的领导力和战略方面没有话语权,你的业务将面临风险。”——Guy Martin,Autodesk。 -* Provide guidelines for making new decisions, and encourage program buy-in and commitment: - * Should business governance of open source be separated from technical governance? - * How can you make employees champions for open source? - * A good strategy document provides answers and should also clarify your organization’s overall stance toward developing with and around open source. -* Align your business objectives and management directives: - * Which types of open source projects directly align with your business goals? -* Lay out a usage policy and trademark that fits your code and concepts: - * Branding an open source project properly is as important as branding any invention, and there should be no questions about usage policies. -* Provide specifics on open source best practices: - * Successful open source projects have rich developer communities and are often productized in commercial products that profit businesses. - * Which specific practices can best foster this kind of sustainable ecosystem? -* Answer questions as they evolve over time. A good open source policy document should include a FAQ, and answers to common questions should be provided continuously in the FAQ over time. +* 为制定新的决策提供指导,鼓励项目接受和承诺: + * 开源的业务治理是否应该与技术治理分开? + * 如何让员工成为开源的拥护者? + * 一个好的战略文档提供了答案,并且还应该阐明你的组织对使用和围绕开源进行开发的总体立场。 + +* 对齐你的业务目标和管理导向: + * 哪些类型的开源项目可以直接匹配你的业务目标? + * 列出符合你的代码和理念的使用策略和商标: + * 适当地给开源项目打品牌和给任何创造打品牌一样重要,且不应该有关于使用策略的问题。 + +* 提供关于开源最佳实践的详细信息: + * 成功的开源项目拥有丰富的开发者社区,并且往往能被产品化为商业产品进而为企业带来利润。 + * 哪些具体实践可以最好地促进这种可持续的生态系统? + * 随着时间的推移回答问题。一个好的开源政策文档应该包含一个常见问答FAQ,并且随着时间的推移,常见问题的解答应该在FAQ中持续的刷新和提供。 -> "FAQs are highly tuned to the questions users and developers actually ask — as opposed to the questions you might have expected them to ask, and therefore, a well-maintained FAQ tends to give those who consult it exactly what they're looking for. Good FAQs are not written, they are grown. They are by definition reactive documents, evolving over time in response to the questions people ask." *-- Karl Fogel, [Producing Open Source Software](http://producingoss.com/). +>“FAQ高度关注用户和开发人员实际提出的问题——而不是你可能期望他们提出的问题,因此,一个维护良好的FAQ往往会给咨询者提供他们想要的东西。好的FAQ不是写出来的,而是成长起来的。它们是反应式文档,随着时间的推移,随着人们提出的问题而不断发展。”—— Karl Fogel, [生产开放软件](http://produceoss.com/)。 -## How to create an open source strategy -The first step in crafting an open source strategy is to decide who should be involved in setting the strategy. This means not only deciding which internal business partners should be involved but deciding whether external strategic help and resources should be sought. +## 如何创建一个开源战略 -**External resources** +制定开源战略的第一步是决定谁应该参与制定战略。这意味着不仅要决定哪些内部业务合作伙伴应该参与进来,还要决定是否应该寻求外部战略帮助和资源。 -There are many external resources that can help you flesh out your open source strategy, and the good news is that many of them are free. The Linux Foundation offers extensive [educational resources](https://www.linux.com/learn/training) that can help you usher in the right strategy, and books like [Best Practices for Commercial Use of Open Source Software](http://www.amazon.com/Best-Practices-commercial-source-software/dp/3738619097/ref=asap_bc?ie=UTF8) can provide guidance. -The [Open Source Guide](https://opensource.guide) produced by GitHub also contains many resources on helping you build or contribute to an open source community. +**外部资源** -Google open sourced its [open source policy documentation](https://opensource.google.com/docs/) and it can serve as a create template to create your own internal policies. +有许多外部资源可以帮助你充实你的开源策略,好消息是它们中的许多都是免费的。Linux基金会提供了广泛的[教育资源](https://www.linux.com/learn/training),可以帮助您引入正确的策略,以及诸如 [《开源软件商业使用的最佳实践》](http://www.amazon.com/Best-Practices-commercial-source-software/dp/3738619097/ref=asap_bc?ie=UTF8) 等书籍也可以提供指导。 -[InnerSource Commons](https://paypal.github.io/InnerSourceCommons/), specializes in helping companies pursue open source principles and practices as well as exchange ideas for internal, proprietary software and infrastructure development. +GitHub出品的 [开源指南](https://opensource.guide) 也包含了许多可以帮助你构建或贡献开源社区的资源。 -Another excellent resource for open source strategy is a blog called [Changelog](https://changelog.com/). It includes a podcast that covers a lot of different open source topics, called "[Request for Commits](https://changelog.com/rfc)." The podcast tackles everything from the human side of creating open source software to questions about business models and strategy. +谷歌开源了它的 [开源策略文档](https://opensource.google.com/docs/) ,它可以作为一个创建模板来创建你自己的内部策略。 -Note that many companies inside and outside the technology industry have very sophisticated open source programs. You can, and should, learn from them. The way they approach open source differs according to their own needs, but you can choose and adapt the practices and strategies that fit your business best. The [TODO Group](http://todogroup.org) at The Linux Foundation was created to bring these companies together to share and evolve best practices. TODO also offers a set of [free open source policies and templates](https://github.com/todogroup/policies) on GitHub that you can use and contribute to. +[InnerSource Commons](https://paypal.github.io/InnerSourceCommons/),专门帮助公司实现开源原则和实践,以及交流关于内部专有软件和基础设施开发的想法。 -General Electric might not be the first company that you think of when it comes to moving the open source needle, but GE is a powerful player in open source. GE Software has an "Industrial[ Dojo](http://cloudfoundry.org/dojo/index.html)" – run in collaboration with the[ Cloud Foundry Foundation](http://cloudfoundry.org/about/index.html) – to strengthen its efforts to solve the world’s biggest industrial challenges. GE derives benefits from the partners it works with in these efforts, and vice versa. +另一个关于开源策略的优秀资源是一个名为[Changelog](https://changelog.com/)的博客。它包括一个涵盖了许多不同的开源话题、名叫“[提交请求](https://changelog.com/rfc)”的播客。这个播客覆盖了从创建开源软件的人性方面到商业模式和战略问题的所有问题。 -Among other organizations that have rolled out professional, in-house programs focused on advancing open source and commercializing tools, Netflix is a true standout. It is well worth visiting visit the company’s[ Open Source Software Center](https://netflix.github.io/). Netflix has contributed many useful tools and applications to the open source community, ranging from[ machine learning and orchestration applications](http://techblog.netflix.com/2016_05_01_archive.html) to utilities that run on its platform, many of which have been tested and hardened at scale. Netflix, in turn, gets contributions that help its platform run more efficiently, and its open source endeavors have opened doors to various partnerships. +请注意,技术行业内外的许多公司都有非常复杂的开源项目。你可以,也应该向他们学习。基于他们自身的需求,他们参与开源的方式有所不同,但是你可以选择和采用最适合你的业务的实践和策略。Linux基金会的 [TODO Group](http://todogroup.org) 的创建是就为了将这些公司聚集在一起,分享和发展最佳实践。TODO还在GitHub上提供了一套[免费开源策略和模板](https://github.com/todogroup/polices),你可以使用及贡献。 -## Internal resources +说到开源先锋,通用电气可能不是你第一个想到的公司,但通用电气是开源领域的强力玩家。通用电气软件有一个“工业[Dojo](http://cloudfoundry.org/dojo/index.html)”——与 [Cloud Foundry基金会](http://cloudfoundry.org/about/index.html) 合作运行——为了强化其在解决世界上最大的工业挑战的力量。通用电气从与其合作伙伴的协作中获得收益,反之亦然。 -While these types of external resources can provide critical guidance and serve as a benchmark for your own strategy, internal collaboration is key in setting your open source business strategy. Your open source strategy should be tailored to your own unique business model, and the people within your own company are the best source of information. Additionally, you need to include all the stakeholders to reach consensus to ensure that everyone is on the same page and invested in seeing the efforts succeed. For example, it is important to involve executive leadership in the collaborative process. +在其他已经开展专业的、自研的用于推进开源和商业化工具的组织中,Netflix是一个真正的突出者。非常值得参观该公司的[开源软件中心](https://netflix.github.io/)。Netflix为开源社区贡献了许多有用的工具和应用,从[机器学习和编排应用](http://techblog.netflix.com/2016_05_01_archive.html) 到在其平台上运行的应用,其中许多工具和应用都经过了大规模测试和加固。反过来,Netflix获得的贡献有助于其平台更高效地运行,同时其开源努力也为各种合作关系打开了大门。 -Creation of an open source program can be invaluable at this point. The TODO Group’s open source guide titled [Creating an Open Source Program](https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program/) states: "By creating an open source program office, businesses can enable, streamline and organize the use of open source in ways that tie it directly to a company’s long-term business plans. An open source program office is designed to be the center of the universe for a company’s open source operations and structure, helping to bring all the needed components together." -An open source program office can help determine policies for code use, distribution, selection, auditing, and more. It can also provide guidance for training developers, ensuring legal compliance, and building community engagement. According to the guide, "The office can also provide advocacy and communications about all things open source inside and outside the company." +## 内部资源 -> "The only way you get hearts and minds (to advance your open source strategy) is to find the people in the individual teams that are willing to be proactive." - [Guy Martin](https://www.linkedin.com/in/guywmartin/), director of Open at [Autodesk](https://autodesk.github.io) (Open@ADSK). +虽然这些类型的外部资源可以提供关键的指引,并作为你自己的战略的基准,但内部协作是制定你的开源业务战略的关键。你的开源战略应该根据你自己独特的商业模式量身定做,而你自己公司里的人是最好的信息来源。此外,您需要卷入所有利益相关者来达成共识,以确保每个人都意见一致、并为看到工作取得成功而投入。例如,让高层领导参与协作过程是很重要的。 -When choosing internal staffers to help set strategy, remember that it is critical to involve people who are qualified to supply business and legal governance of projects as well as people who can supply technical governance. For example, an employee with technical skills may have an understanding of current open source practices and might be qualified to set policies such as Inbound Contribution Guidelines, while a person with business credentials might be more qualified to set policies regarding trademarks. Conversely, an employee with legal qualifications is best for defining licensing policies. And, of course, it is essential to identify stakeholders who have true passion for open source. Considerations for open source program office structure and discussion of the various management roles are detailed in the [open source guide mentioned previously.](https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program/) +在这一点上,创建一个开源项目是无价的。TODO Group的开源指南 [《创建一个开源项目》](https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program/)  指出:"通过创建开源项目办公室OSPO,企业可以是能、简化和组织开源的使用,并使其直接与公司的长期业务计划挂钩。开源项目办公室旨在成为公司开源运营和组织架构的中心,帮助将所有需要的组件凝聚在一起。 -How can you engage all of your stakeholders? Start by talking and, crucially, listening to what’s working and what isn’t. The way you engage will depend on what works for your company and its existing culture. But it always pays to do the research before you dive into the strategy. +开源项目办公室可以帮助制定代码使用、分发、选择、审计等方面的政策。它还可以为培训开发者、确保法务合规性和建立社区参与提供指导。根据该指南,“办公室还提供在公司内外有关开源的推广宣传和交流。” -When Guy Martin first started as the open source director at Autodesk, he asked his boss for two lists: "I said, I'd like a list of people who believe in what you're trying to do with (open source) and why you hired me in this initiative. And I want a list of people who either flat-out don't believe it's going to work or who may be on the fence." Then Martin talked to everyone on those two lists. The detractors helped identify where the stumbling blocks were going to be for their business. And the champions were the people he approached to help him build the program. +>“你获得人心(推进开源战略)的唯一方法就是在各个团队中找到那些愿意主动出击的人。” —— [Guy Martin](https://www.linkedin.com/in/guywmartin/), [Autodesk](https://autodesk.github.io) 开源负责人(Open@ADSK)。 -## Key considerations + +在选择内部员工帮助制定战略时,请记住,关键是要让有资格提供项目业务和法律治理的人员以及能够提供技术治理的人员参与进来。例如,具有技术技能的员工可能了解当前的开源实践,有资格来制定例如“入站贡献准则”的策略,而具有商业资格的人员可能更有资格制定有关商标的策略;对应的,具有法律资格的员工最适合定义开源许可策略。当然,识别对开源抱有真正热情的利益相关者是至关重要的。关于开源项目办公室的架构及各种管理角色探讨的内容在[前面提到的开源指南](https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program/)中有详细说明。 -We’ve touched on the critical components of your strategy document and how to go about creating it. Now, here are two really important considerations in creating your strategy: governance and sustainability. +如何让所有的利益相关者参与进来?从交谈开始,最重要的是,倾听什么有效,什么无效。你参与的方式将取决于哪种方式对你所在的公司及其现有文化有效。但在你深入战略之前,先做研究总是有好处的。 -These concepts will set the philosophical framework for your program, determine how it runs, and ultimately help determine how/whether you can maximize your open source strategy. +Guy Martin刚开始担任Autodesk的开源负责人时,他向老板要了两份名单:“我说,我想要一份名单,上面写着相信你要做的事情(开源)的人,以及你为什么在这个项目中雇佣我。我还要一份名单,上面要么是坚决不相信这项计划会奏效的人,要么是持观望态度的人。"然后Martin和这两个名单上的每个人都进行了交流。诋毁者帮助确定了他们业务的绊脚石在哪里,而他接触到的拥护者们帮助他建立这个项目。 -### Consideration 1: Governance -Before you set an open source strategy, you’ll likely have many disparate processes in place -- across teams and departments, product teams and IT, etc. -- to consume code or contribute upstream. Getting standardized governance in place is key to streamlining and optimizing processes, which makes it easier for developers to participate. It also helps get everyone on the same page and provides the foundation for measuring progress toward your goals and reducing risk. If everyone is following the same policies and processes, it’s much easier to pinpoint and address any roadblocks that may be happening. +## 关键注意事项 -> "I didn't want a 10-week process with 500 pages of documentation for a 5-line bug fix, so I worked with legal to create a streamlined workflow that an engineer could accomplish in a reasonable amount of time." - [Guy Martin](https://www.linkedin.com/in/guywmartin/), director of Open at [Autodesk](https://autodesk.github.io) (Open@ADSK). +我们已经介绍了战略文档的关键组成部分以及如何创建战略文档。在制定战略时有两个非常重要的考虑因素:治理和可持续性。 -Your strategy should be very specific about open source governance within your organization and outside it. Proper governance requires specific policies and processes, but should also guide the culture that surrounds the building, deployment, and maintenance of open source software. In particular, open source culture is geared toward transparency, openness, and encouraging participation from diverse contributors. +这些概念将为你的项目建立哲学框架,决定它如何运行,并最终帮助决定如何/是否可以最大化你的开源策略。 -> "There are open source projects where external contributions are welcome, but the road maps and the governance of the projects are very much in the hands of a single company. Then there is truly community-driven open source. Which kind of projects are you working with?" - [Joe Beda](https://twitter.com/jbeda), co-founder of Kubernetes at Google and co-founder and CTO at Heptio. +### 注意事项1:治理 -Governance can help minimize risks. For example, many developers are comfortable acquiring open source tools online and integrating them with existing code, platforms and applications. However, allowing them to do so without any formal acquisition process in place means courting significant risks ranging from security risks to legal risks. Likewise, open source licenses and policies can have a huge impact on an organization’s control over technology and intellectual property portfolios. In addition, for open source projects that also have commercial editions, it is worth considering whether external stakeholders should be involved in governance. +在你制定开源策略之前,你可能会有许多不同的流程——跨团队和部门、产品团队和IT等——来使用代码或贡献上游。获得标准化的治理是简化和优化流程的关键,可以使得开发人更容易地参与。它还有助于让每个人都在同一页面上,并为衡量实现目标和降低风险的进展提供基础。如果每个人都遵循相同的策略和流程,则更容易查明和解决可能发生的任何障碍。 -Having an internal governance structure which closely maps external open source community structures also streamline the "context switch" of your developers when working on projects directed towards internal efforts as compared to external contributions. It also eases the transition when an internal project is eventually open sourced, since the developers are already working in that governance mode. +>“我不希望为了一个5行的bug修复代码而花费10周的时间和500页的文档,所以我和法务合作,创建了一个简化的工作流程,让工程师可以在合理的时间内完成。” —— [Guy Martin](https://www.linkedin.com/in/guywmartin/), [Autodesk](https://autodesk.github.io) 开源负责人(Open@ADSK)。 -> "One of the things that we've tried to engender in the Kubernetes community is the idea of project over people or company. What's good for the project is a separate question from what's good for the companies that are involved with the project. When you end up with open source projects that are too tightly tied to a single company, really sticky issues can arise." – Joe Beda, Heptio. +你的策略应该非常具体地覆盖你所在组织内外的开源治理。正确的治理需要具体的策略和过程,但也应该指导围绕构建、部署和维护开源软件的文化。特别是,开源文化是面向透明,开放,并鼓励来自多元化的贡献者的参与。 -### Consideration 2: Sustainability +> 有一些开源项目欢迎外部贡献,但项目的路线图和治理在很大程度上掌握在一家公司手中。还有一种是真正的社区驱动的开源。“你在做什么类型的项目?” —— [Joe Beda](https://twitter.com/jbeda), Kubernetes项目联合创始人,Heptio联合创始人及CTO。 -A key driver to succeeding with your open source program is building a strategy around encouraging other companies to take dependencies on your open source projects. Long-term, sustainable projects arise from feature-rich developer communities whose code is productized in commercial products that profit businesses which in turn reinvest back into the projects. The goal is to enable a virtuous projects build products that generate profits that get reinvested back into the project community lifecycle. +治理可以帮助将风险降至最低。例如,许多开发人员乐于在线获取开源工具,并将其与现有代码、平台和应用集成。然而允许他们在没有任何正式获取流程的情况下这样做,意味着面临从安全风险到法律风险等重大风险。同样,开源许可证和策略也会对组织对技术和知识产权组合的控制产生巨大影响。此外,对于同样拥有商业版的开源项目,是否应该让外部利益相关者参与治理也是值得考虑的。 -Partnerships, contributor agreements and commercial dependencies can drive a virtuous cycle of commercial and community engagement based on accepted governance and IP models. An intelligently defined open source program can help drive all of these. What is your organization’s policy toward sharing and monetizing open source inventions and driving partnerships and commercial dependencies? +与外部贡献相比,拥有与外部开源社区结构紧密对应的内部治理架构,也可以简化你的开发人员在处理面向内部工作的项目时的“上下文切换”。当一个内部项目最终开源时,这样也简化了过渡,因为开发人员已经在这种治理模式下工作。 -For example, many open source tools are offered in free editions online but also exist in fee-based, supported instances, and it is common for outside contributors to advance platforms and applications that are offered commercially. It is wise to define in your strategy document exactly how such editions differ and how control is exerted over them, keeping in mind that levels of control can vary widely over time. +>“我们在Kubernetes社区中尝试的一件事是项目优先于人或公司的理念。什么对项目有好处是一个独立的问题(相比什么对参与项目的公司有好处)。当你遇到与一家公司过于紧密捆绑的开源项目时,真正棘手的问题可能会出现。” —— [Joe Beda](https://twitter.com/jbeda), Heptio。 -## Other components -Beyond the critical elements of your strategy discussed earlier, there are many other policies to lay out in your strategy document. The good news is that there are free guidelines from trusted external sources that you can take advantage of. +### 注意事项2:可持续性 -For example, Synopsys offers a useful four-pillar set of guidelines for setting your open source strategy: +你的开源项目取得成功的一个关键驱动力是制定一个围绕鼓励其他公司依赖你的开源项目的策略。长期的、可持续的项目产生于功能丰富的开发者社区,这些社区的代码产品化为商业产品,商业产品获利并反向再投资到项目中。目标是使能一个良性的项目构建产生利润的产品,并将利润再投资到项目社区生命周期中。 -* Define strategy for building open source platforms and applications -* Define strategy for building with open source, such as integrating existing products and services with open source tools -* Define strategy for building for open source community, such as encouraging contributions to and involvement with existing projects -* Define strategy for building on open source, including internal replatforming or application rollouts based on open source +伙伴关系、贡献者协议和商业依存关系可以推动基于公认的治理和知识产权模型的商业和社区参与的良性循环。一个被明智地定义的开源项目可以帮助推动所有这些。你的组织在分享开源创造并将其货币化以及推动合作关系和商业依赖方面的策略是什么? -In addition to these strategic pillars and guidelines on governance, here are some other key components to include in your strategy document: +例如,许多开源工具在线提供免费版,但也存在收费的、受支持的实例,外部贡献者推进商业提供的平台和应用是很常见的。明智的做法是在您的战略文档中,准确地定义这些版本的差异以及将如何对它们施加控制,记住控制水平可能会随着时间的推移而变化。 -* Goals. Define your goals for your business strategy and how open source can drive achievement of your goals. For example, many companies are currently transforming their platform infrastructure by moving to open cloud platforms such as OpenStack. In many cases, this is because they studied the ROI they could get by moving infrastructure to the cloud, determined what levels of vendor lock-in they could avoid, and set goals for specific financial milestones they want to achieve. -Build a holistic set of goals for your strategy document, with metrics for achievement. Among metrics to track, consider reporting on increases in upstream contributions, cuts to development costs, and increases in recruitment of maintainers. In addition to these metrics, your inventory of business objectives and goals should provide specifics on open source leadership milestones, and project security and performance advancements. Also, though, keep in mind that there are no magic metrics. +## 其它 -> "Find metrics for each community that you're working with. I tend to find metrics based on what a specific community is feeling as pain, and try to change those metrics for the better. There is no one, magic assessment where if you look at six metrics, ranging from pull requests to contributor numbers, you can suddenly pronounce your community and ecosystem healthy. " – [Sarah Novotny](https://twitter.com/sarahnovotny), Kubernetes community program manager at Google. -* **Management Plan** Once your strategy document includes specific goals, ensure that it also sets out specific actions to achieve your open source business objectives, and assign roles and responsibilities for tracking progress. The most important part is to get buy in for your executive management chain. +除了前面讨论的战略的关键要素之外,还有许多其他策略可以在战略文档中列出。好消息是有一些来自可信赖的外部资源的免费指引可以利用。 -* **Provide specific KPIs (Key Performance Indicators)** for tracking the achievement of goals. +例如,Synopsys提供了一套有用的开源战略制定四支柱指导准则: -* **Policies and processes.** In addition to licensing and rules for accepting contributions and outside code, managing policies and processes is key. The TODO (Talk Openly Develop Openly) Group at The Linux Foundation offers [free open source policy examples and templates](https://github.com/todogroup/policies) on GitHub. +* 定义构建开源平台和应用的策略 +* 定义使用开源的策略,例如将现有产品和服务与开源工具集成 +* 定义开源社区建设的策略,例如鼓励对现有开源项目的贡献和参与 +* 定义基于开源的构建策略,包括基于开源的内部平台改造或应用部署 -* **Partnerships and acquisitions.** Partnerships and acquisitions are key parts of a successful open source business strategy. Your strategy document should be specific about goals in these areas, and should lay out key strategic partnerships that your organization may have with other organizations such as TODO, The Cloud Foundry Foundation, and more. +除了这些战略支柱和治理指导方针外,以下是您的战略文档中需要包含的其他一些关键组件: -* **Patents and IP.** Patent rights and intellectual property guidelines can have an enormous impact on how inventions are used, and in many cases commercially leveraged. Your strategy document should be specific about your patents, rules pertaining to patents, and your IP guidelines. If your organization has a separate IP strategy, ensure that your open source strategy is aligned with it. +* **目标**:定义你的业务战略的目标,以及开源如何推动实现你的目标。例如,许多公司目前正在通过迁移到OpenStack等开放云平台来改造其平台基础架构。在许多情况下,这是因为他们研究了通过将基础设施迁移到云可以获得的投资回报ROI,确定了他们可以在多大程度上避免供应商锁定,并为他们想要实现的特定财务里程碑设定了目标。 -* **Foundations and sponsorships.** Open source foundations and other nonprofit organizations have had an enormous impact on the world of open source in recent years. Your organization can benefit from working with foundations ranging from The Linux Foundation to the Eclipse Foundation to the Apache Software Foundation, and you may even benefit from launching an open source-focused foundation. Your strategy document should supply any existing partnerships and plans for working with foundations. +为您的战略文档建立一套完整的目标,并提供实现的度量指标。 +在要跟踪的指标中,考虑报告上游贡献的增加、研发成本的削减以及维护者招聘的增加。除了这些指标之外,你的业务目标清单还应该提供关于开源领导力里程碑、项目安全性和性能提升的细节。不过,也要牢记世界上没有魔力指标。 -> "Foundations provide a lot of value. Without them, it has historically been hard for a lot of very critical projects to get the funding they need to be well maintained. They help ensure a level playing field and they provide mechanisms for organizations to give back to open source projects without contributing developers directly." — [Luke Faraone](https://twitter.com/lfaraone), software engineer at [Dropbox](https://opensource.dropbox.com/). +>“查找您正在参与的每个社区的度量指标。我倾向于根据一个特定的社区所感受到的痛苦来寻找度量标准,然后试图改变这些度量标准。并不存在一个神奇的评估,假设你只要盯紧张六个指标(从拉取请求PR到贡献者数量)然后就可以突然宣布你的社区和生态是健康的。” —— [Sarah Novotny](https://twitter.com/sarahnovotny),谷歌Kubernetes社区项目经理 -* **Inbound Contribution Guidelines/Metrics.** Your strategy can derive enormous benefits from inbound contributions (see our section on considerations for sustainability.) Your strategy document should provide both guidelines and metrics for contributions. +* **管理计划**:一旦你的战略文件包含了具体的目标,确保它也列出了实现你的开源业务目标的具体行动,并分配角色和责任来跟踪进展。最重要的部分是得到你的高层们的认可。 -You don’t have to build your policies in this area from the ground up; the [Contributor Covenant](http://contributor-covenant.org/) is a rock solid code of conduct and contributor guidelines document that is used by [over 40,000 open source projects](http://contributor-covenant.org/adopters/), including Kubernetes, Rails, and Swift. Likewise, organizations such as The TODO Group, The Linux Foundation, and Synopsys have extensive experience with setting inbound contribution guidelines. +* **提供特定的KPI(关键绩效指标)**:用于跟踪目标的实现情况。 -A good inbound contribution strategy also includes carefully documenting your APIs — always a best practice. OpenAPI has emerged as the industry standard for describing RESTful APIs. +* **策略和流程**:除了开源许可证和接受贡献和外部代码的规则之外,管理策略和流程也是关键。Linux基金会的TODO(Talk Openly Develop Openly:开放的讨论、开放的开发)Group在GitHub上提供了 [开源策略样例及模板](https://github.com/todogroup/policies) 。 -> "One of the most important things when building an open source community is making sure that your own processes are open. The more transparent you can make your decision-making processes, the more of a sense of ownership your community will have. You also want to make sure that your process doesn't become a blocker. If your open source process for either inbound or outbound contributions is onerous, people will look to bypass the process or simply decide that contributing is too difficult." – [Luke Faraone](https://twitter.com/lfaraone), software engineer, [Dropbox](https://opensource.dropbox.com/) +* **合作和收购**:合作和收购是一个成功的开源业务战略的关键部分。你的战略文档应该明确这些领域的目标,并应该列出你的组织可能与其他组织(如TODO、Cloud Foundry基金会等)建立的重要战略伙伴关系。 -> "You need to give people ways to get involved with your projects that don't require them to have a PhD or to have been working in a similar area for 25 years. You need ways for them to get involved quickly. That means that you need really good setup documentation, and it also means having active and healthy forums."- [Ian Varley](https://www.linkedin.com/in/ianvarley/), software architect at Salesforce. +* **专利和知识产权**:专利和知识产权指引可以对开源的使用方式产生巨大的影响,特别是在许多情况下设计到商业化应用时。你的战略文档应该具体说明你的专利、与专利相关的规则以及你的知识产权指引。如果你的组织有单独的知识产权战略,请确保你的开源战略与之保持一致。 -## When and how much to invest: determining ROI +* **基金会和赞助**:近年来,开源基金会和其他非营利组织对开源世界产生了巨大的影响。你的组织可以从与Linux基金会、Eclipse基金会、Apache软件基金会等基金会的合作中受益,您甚至可以从启动一个以开源为中心的基金会中受益。你的战略文件应该提供任何已有的合作关系以及与基金会合作的计划。 -There is no way to wave a magic wand and find the exact benefit you will get from your open source program, but there are guidelines for how to approach it. You must consider how return of investment (ROI) relates to your strategy. The bottom line is that the return on investment that you can derive from your open source strategy should be considered from numerous angles. +>“基金会提供了很多价值。没有它们,历史上很多非常关键的项目都很难获得所需的资金。它们有助于确保一个平等的竞争环境,并为组织提供了一种使其能够在不直接贡献开发者的情况下也能回馈开源项目的机制。“ —— [Luke Faraone](https://twitter.com/lfaraone),[Dropbox](https://opensource.dropbox.com/)软件工程师 -First, you must weigh the benefits of open source with the risks and costs of managing it. [A free, joint white paper](https://fossbazaar.org/system/files/Open.Source.ROI_.Whitepaper.pdf) (PDF) from Novica and OpenLogic provides many specific ways to calculate open source ROI and strategize around it. For example, the following graphic from the white paper shows that the duration of project development has a profound impact on various elements of ROI calculation, ranging from licensing expenses to IT/Services expenses: -![Credit: Novica, OpenLogic](/img/guides/strategy1.jpg) +* **入站贡献准则/度量指标**:你的战略可以从入站贡献中获得巨大的收益(请参阅我们关于可持续性考虑因素的部分)。你的战略文档应该为贡献提供指导方针和衡量标准。 -As you go about calculating ROI, keep the following guidelines in mind: +您不需要从头开始制定相关策略; [贡献者契约](http://contributor-covenant.org/) 是一个坚如磐石的行为规则和贡献者规则文档,被 [超过4万个开源项目](http://contributor-covenant.org/adopters/)(包括Kubernetes、Rails和Swift) 。同样,TODO Group、Linux基金会和Synopsys等组织在设置入站贡献规则方面也有丰富的经验。 -* **Calculate the benefits in cost savings.** Of course, a key metric to evaluate in determining the benefits of your open source strategy is calculating cost reduction. Evaluate both cost savings from open source deployments and open source inventions, taking into account savings on licensing fees, hardware, support, and more. +一个好的入站贡献策略还包括仔细记录你的API(这也一直是最佳实践)。OpenAPI已经成为描述RESTful API的行业标准。 -Support is a major cost center for many organizations, and if you can reduce costs for support, you can reap big financial benefits. Likewise, what specific hardware and licensing costs might you eliminate by, say, moving to open source platforms ranging from Linux to OpenStack? In the case of open cloud platforms, for example, storage and compute resources in the cloud can entirely eliminate the need for many such resources in-house. Also keep in mind that although "free" open source software may not have the same licensing fees as proprietary software, it comes with a development cost involved in contributing upstream, integrating it with other offerings, and more. +>“在构建开源社区时最重要的一件事就是确保你自己的流程是开放的。你的决策流程越透明,你的社区就越有主人翁意识。你也要确保你的流程不会成为阻碍者。如果你的开源流程(无论是入站贡献还是出站贡献)是繁重的,人们会希望绕过这个流程,或者只是认为贡献太难了。” —— [Luke Faraone](https://twitter.com/lfaraone),[Dropbox](https://opensource.dropbox.com/)软件工程师 -* **Calculate the benefits by reach and conversion**. By tracking the reach of open source projects you create, you can gather useful information, and in some cases gauge conversion for your organization’s products and services. Package managers such as npm and RubyGems.org can be used to distribute open source projects, subsequently allowing you to track downloads. Many organizations put their projects on GitHub, where the "Traffic" page can detail how many times a project has been cloned and much more. These metrics can aid brand awareness around your projects, likeliness to gain contributors, and more. +>“你需要给人们提供方法来参与你的项目,而不需要他们拥有博士学位或在相关领域有25年工作经验。你需要的是让他们快速地参与进来,这意味着你需要非常好的启动文档,以及要有活跃、健康的论坛。”-[Ian Varley](https://www.linkin.com/in/ianvarley/),Salesforce的软件架构师。 -* **Do an operational risk assessment.** The Open Web Application Security Project (OWASP) recently added "using components with known vulnerabilities" to its top 10 list of risks, and open source software can introduce vulnerabilities in some cases. An open source software security audit gives you visibility into the components and the vulnerabilities within your code. Black Duck [performs these](https://www.blackducksoftware.com/on-demand/open-source-security-audit), and tools such as [Wireshark](http://www.wireshark.org/) and [Nikto](https://cirt.net/nikto2/) can identify vulnerabilities and problems. -* **Avoid legal risk.** Operational risk and legal risk are different, but assessing both is important. Legal risks around open source can include costs from legal actions surrounding using the wrong license, costs from merging code between projects that have disparate licences, and more. +## 何时投资及投资的金额:确定ROI -The [Open Source Definition](http://www.opensource.org/docs/osd) is where you should start to understand how open source projects should be licensed, and what actually qualifies as open source. It's also good to review[ Open Standards requirements](http://opensource.org/osr). +没有办法能让你一挥魔杖就看清可以从你的开源项目中获得的确切好处,但有关于如何实现它的指引。你必须考虑投资回报率(ROI)与你的战略之间的关系。底线是,你应该从多个角度来考虑可以从你的开源战略中获得的投资回报。 -You must also assess what kinds of licenses your projects should have. The Software Freedom Law Center (SFLC) offers[a set of online resources on how open source licenses and copyrights work, and much more](http://www.softwarefreedom.org/resources/2008/foss-primer.html). And, a simplified matrix of license features can be found at [Choosealicense.com](http://choosealicense.com/). +首先,您必须权衡开源的好处与管理它的风险和成本。来自Novaica和OpenLogic的 [白皮书《开源投资回报比ROI:实现开源软件的财务承诺》](https://fossbazaar.org/system/files/Open.Source.ROI_.Whitepaper.pdf) (PDF) 提供了许多计算开源的ROI并围绕其制定战略的具体方法。例如,以下来自白皮书的图表显示,项目开发的持续时间对ROI计算的各种要素(从许可费用到IT/服务费用)有着深远的影响: -You’ll also want to consider the costs and benefits of license compliance. The cost of not complying with an open source license may be steep and involve lawsuits. The Linux Foundation’s[ Open Compliance program](https://compliance.linuxfoundation.org/) offers several resources including [publications](https://compliance.linuxfoundation.org/references/compliance-related-publications), [training materials](https://www.openchainproject.org/curriculum), and a [free training course](https://training.linuxfoundation.org/linux-courses/open-source-compliance-courses/compliance-basics-for-developers) for developers. (You can also see our guide on [Using Open Source Code](https://www.linuxfoundation.org/resources/open-source-guides/using-open-source-code/) which outlines a baseline compliance program.) -Legal issues should, of course, be assessed by your own legal personnel. The SFLC authors are attorneys who were part of creating popular open source licenses. It's also an excellent idea to keep up with current and archived editions of the[ International Free and Open Source Software Law Review.](http://www.ifosslr.org/ifosslr) +![作者: Novica, OpenLogic](/img/guides/strategy1.jpg) -## Deciding where to invest +在计算ROI时,请记住以下准则: -Investing in open source can be approached from numerous angles, including leveraging in-house resources and external ones. Keep in mind that devoting developer resources to open source and upstream contributions are part of investing in open source. It is important to understand how incoming and outgoing code and projects are arriving and being distributed. +* **计算来自成本节省的收益**:在确定开源策略的好处时,需要评估的一个关键指标是计算成本节省。评估开源部署和开源开发带来的成本节省,同时考虑许可费、硬件、支持等方面等。 -**Identify which open source projects are critical to delivering products or services.** Once a company understands its IP portfolio and the open source contributions its developers want to make, it can work to ensure its developers are empowered to make those contributions. +对于许多组织来说,支持是一个主要的成本中心,如果你能够降低支持成本,您就可以获得巨大的财务收益。同样,通过迁移到Linux及OpenStack等开源平台,你可以消除哪些具体的硬件和许可成本?例如在开放云平台的情况下,云中的存储和计算资源可以完全消除许多内部对此类资源的需求。但一定要记住,尽管“免费”的开源软件可能没有与专有软件相同的许可费用,但它也会产生开发成本,包括贡献上游、与其他产品集成等等。 -**Conduct an internal audit**. Have you acquired open source tools and platforms through acquisitions and are you getting the maximum benefits from them? Assess this in your audit. +* **按到达率和转化率计算收益**:通过跟踪你创建的开源项目的进展,你可以收集有用的信息,在某些情况下,还可以衡量你的组织的产品和服务的转化率。报管理器(npm和RubyGems.org等)可用于分发开源项目,之后也允许你跟踪下载。许多组织将他们的项目放在GitHub上,在GitHub上的“流量”页面可以详细看到一个项目被克隆了多少次等等。这些指标可以帮助你的项目的品牌知名度、获得贡献者的可能性等等。 -**Identify which internal projects you could open source.** +* **做运营风险评估**:开放式Web 应用程序安全项目(OWASP) 最近将“使用具有已知漏洞的组件”列入其十大风险列表,开源软件在某些情况下可能引入漏洞。开源软件安全审计 让你可以查看代码中的组件和漏洞。黑鸭[可以执行评估](https://www.blackducksoftware.com/on-demand/open-source-security-audit),[Wireshark](http://www.wireshark.org/) 和[Nikto](https://cirt.net/nikto2/) 等工具可以识别漏洞和问题。 -You can also structure good ways to identify open source projects that either exist in-house at your organization or should exist. For example, many Silicon Valley companies have internal competitions and hackathon events that offer employees top prizes for their best open source inventions. Through these, companies ranging from PayPal to Google have employee-invented open source creations built into their own fabric and product portfolios. + +* **避免法律风险**:运营风险和法律风险是不同的,但评估两者都很重要。围绕开源的法律风险可以包括使用错误许可证的法律诉讼成本,具有不兼容的开源许可协议项目的代码合入成本等。 -> "One great thing that happens during a hackathon is the power of recombination -- of inventors saying ‘I know one way to do this, and over here is another project that aids that process, and I can put these things together.’ If everything is closed source, the problem is that you have a lot fewer building blocks to work with. By contrast, the world is your oyster with open source. You have so many more building blocks available to you." – [Ian Varley](https://www.linkedin.com/in/ianvarley/), software architect at Salesforce. +[开源定义](http://www.opensource.org/docs/osd) 是你应该开始了解开源项目应该如何许可,以及什么是真正的开源的地方。也可以查看[ 开放标准要求](http://opensource.org/osr)。 -Next, turn to external resources to help pinpoint projects that you’re not yet using or participating in, but that may have a business benefit. There is tremendous leverage in choosing the right open source projects and communities at the outset. Selecting strategically important projects for focus is critical. +你还必须评估你的项目应该采用哪些类型的开源许可证。软件自由法律中心(SFLC)提供了[一套关于开源许可证和版权如何运作的在线资源](http://www.softwarefreedom.org/resources/2008/foss-primer.html)。此外,还可以在[Choosealicense.com](http://choosealicense.com/)上找到开源许可证特点的简化列表。 -**Partner with other organizations**. They can help you choose the best projects to get involved with and identify what projects they are reaping benefits from. And there are several independent organizations that can help. The Linux Foundation, TODO Group, Innersource Commons and Open Source Initiative can all provide guidance. +你还需要考虑开源许可证合规的成本和好处。不遵守开源许可证的成本可能很高,并涉及诉讼。Linux基金会的[开源合规计划](https://compliance.linuxfoundation.org/) 提供了多种资源,包括[出版物](https://compliance.linuxfoundation.org/references/compliance-related-publications)、[培训资料](https://www.openchainproject.org/curriculum)、以及为开发者提供的[免费培训课程](https://training.linuxfoundation.org/linux-courses/open-source-compliance-courses/compliance-basics-for-developers) 。(你还可以查看我们的[ 使用开源代码](https://www.linuxfoundation.org/resources/open-source-guides/using-open-source-code/) 指南,其中有合规基础的概述。) -**Examine which projects other organizations in your industry contribute to.** They can steer you toward the right projects to get involved with. For example, many telecoms are reaping big benefits from open Network Functions Virtualization (NFV) technology that can eliminate historically proprietary components in telecom technology stacks. Some of these companies work with The Linux Foundation on NFV initiatives and there are several [working groups](https://wiki.openstack.org/wiki/TelcoWorkingGroup) that focus on NFV. These industry-focused working groups can provide you with valuable guidance. +法律问题当然应该由你自己的法律专家来评估。SFLC的作者们是那些参与了主流开源许可证的律师们。参考最新的以及历史版本的[ 国际自由和开源软件法律评论](http://www.ifosslr.org/ifosslr)也是一个很好的办法。 -Are you interested in more resources to help you set your strategy? Here are some excellent ones: -### Measuring Open Source ROI +## 决定投资方向 -[Open Source Return on Investment](https://fossbazaar.org/system/files/Open.Source.ROI_.Whitepaper.pdf) +投资开源可以从多个角度进行,包括利用内部资源和外部资源。请记住将开发者资源投入到开源和上游贡献是投资开源的一部分。理解进入和输出的代码以及项目是如何产生及分发非常重要。 -### Launching Successful Open Source Projects +**识别哪些开源项目对交付产品或服务至关重要**:一旦一家公司了解了其知识产权组合以及其开发者希望做出的开源贡献,它就可以努力来保障其开发者有能力做出这些贡献。 -[The Linux Foundation on Starting Successful Projects](http://event.lvl3.on24.com/event/14/07/58/6/rt/1/documents/resourceList1493819210084/how_to_start_a_successful_open_source_project.pdf) +**进行内部审计**:你是否通过收购获得了开源工具和平台,你是否从中获得了最大化的收益?在你的审计中对此进行评估。 -### Legal Resources +**确定哪些内部项目可以开源** -* [International Free and Open Source Software Law Review.](http://www.ifosslr.org/ifosslr) -* [Open Compliance program](https://compliance.linuxfoundation.org/) +你还可以采用好的方法来识别在你的组织内部存在或应该存在的开源项目。例如,许多硅谷公司都有内部竞赛和黑客马拉松活动,为员工的中最好的开源创造提供大奖。通过这些方法,从PayPal到谷歌等公司都将员工的开源创造内置到自己的架构和产品组合中。 -### Licensing +>“在黑客马拉松中发生的意见伟大的事就是重组的力量——开发者说‘我知道有一个方法来实现这个,这里有另一个项目来帮助这个过程,而我可以把这些东西组合在一起。’如果所有东西都是闭源的,那么问题是你可以使用的构建模块就会少很多。相比之下,有了开源意味着世界尽在你的掌握之中,你有更多的构建模块可供你使用。” —— [Ian Varley](https://www.linkedin.com/in/ianvarley/),Salesforce软件架构师。 + +然后,借助外部资源来帮助确定你尚未使用或参与、但可能具有业务利益的项目。在一开始就选择正确的开源项目和社区具有巨大的影响力。选择具有重要战略意义的项目来作为重点至关重要。 + +**与其他组织合作**:它们可以帮助你选择最好的项目来参与,并识别它们从哪些项目中获得收益。有几个独立的组织可以提供帮助,Linux基金会、TODO Group、Innersource Commons和OSI都可以提供指导。 + +**检查你所在行业的其他组织为哪些项目做出了贡献**:它们可以引导你去参与正确的项目。例如,许多电信企业正在从开放式网络功能虚拟化(NFV)技术中获得巨大收益,该技术可以消除电信技术堆栈中的历史专有组件。其中一些公司与Linux基金会合作开展NFV计划,还有几个专注于NFV的[工作组](https://wiki.openstack.org/wiki/TelcoWorkingGroup)。这些专注于行业的工作组可以为你提供有价值的指引。 + +对更多的能帮助你建立战略的资源感兴趣?下面是一些优质资源: + +### 衡量开源ROI + +[开源的投资回报比ROI](https://fossbazaar.org/system/files/Open.Source.ROI_.Whitepaper.pdf) + +### 启动成功的开源项目 + +[Linux基金会:启动成功的开源项目](http://event.lvl3.on24.com/event/14/07/58/6/rt/1/documents/resourceList1493819210084/how_to_start_a_successful_open_source_project.pdf) + +### 法务资源 + +* [国际自由和开源软件法律评论](http://www.ifosslr.org/ifosslr) +* [开源合规计划](https://compliance.linuxfoundation.org/) + +### Licensing开源许可证 [Choosealicense.com](http://choosealicense.com/) -### Contributor Code of Conduct +### 贡献者行为准则 [The Contributor Covenant](http://contributor-covenant.org/) -### Open Source Policy +### 开源策略 -[TODO Group Templates](https://github.com/todogroup/policies) +[TODO Group模板](https://github.com/todogroup/policies) -### Open Source Strategy Blog +### 开源战略博客 [Changelog](https://changelog.com/) -### Open Source Strategy Podcast +### 开源战略播客 -[Request for Commits](https://changelog.com/rfc) +[提交请求](https://changelog.com/rfc) -## Acknowledgements +## 致谢 -Contributors: +贡献者: -* [Andrew Aitken](https://www.linkedin.com/in/opensourcestrategy/), Global Open Source Practice Leader, Wipro -* [Chris Aniszczyk](https://twitter.com/cra), CTO, CNCF -* [Joe Beda](https://twitter.com/jbeda), co-founder of Kubernetes at Google and co-founder and CTO at Heptio -* [Luke Faraone](https://twitter.com/lfaraone), software engineer at Dropbox -* [Jim Jagielski](https://twitter.com/jimjag/), Open Source Chief at Consensys -* [Guy Martin](https://www.linkedin.com/in/guywmartin/), director of Open at Autodesk (Open@ADSK) -* [Sarah Novotny](https://twitter.com/sarahnovotny), Kubernetes community program manager at Google -* [Ian Varley](https://www.linkedin.com/in/ianvarley/), software architect at Salesforce +* [Andrew Aitken](https://www.linkedin.com/in/opensourcestrategy/),全球开源实践领导者,Wipro +* [Chris Aniszczyk](https://twitter.com/cra),CNCF 基金会CTO +* [Joe Beda](https://twitter.com/jbeda), Kubernetes项目联合创始人,Heptio联合创始人及CTO +* [Luke Faraone](https://twitter.com/lfaraone),Dropbox软件工程师 +* [Jim Jagielski](https://twitter.com/jimjag/),Consensys开源总监 +* [Guy Martin](https://www.linkedin.com/in/guywmartin/),Open at Autodesk开源负责人 +* [Sarah Novotny](https://twitter.com/sarahnovotny),谷歌Kubernetes社区项目经理 +* [Ian Varley](https://www.linkedin.com/in/ianvarley/),Salesforce软件架构师 diff --git a/content/zh-CN/guides/todo-contribution-guidelines.md b/content/zh-CN/guides/todo-contribution-guidelines.md index 746c8e9f..d505182a 100644 --- a/content/zh-CN/guides/todo-contribution-guidelines.md +++ b/content/zh-CN/guides/todo-contribution-guidelines.md @@ -1,67 +1,66 @@ --- -title: Open Source Program Office Case Study Guidelines +title: 开源项目办公室案例指南 --- -The TODO OSPO Case Study initiative features real-world use cases and the impact OSPO Programs and open source are having on an organization. -OSPO Use Cases build narratives around open source organization’s journey that includes Open Source Program Office highlighted activities, organizational structure, -best practices, goals, and success stories, showcasing rganizations as leaders in the OSPO and open source management ecosystem. +TODO OSPO案例计划聚焦于真实世界里的实践案例以及OSPO/开源对具体组织的影响。OSPO案例围绕开源组织的历程构建叙述,其中包括开源项目办公室OSPO的重点活动、组织结构、最佳实践、目标和成功案例,展示这些组织在OSPO和开源管理生态中的领导者地位。 -## Requirements -**Who can be featured in an OSPO Case Study?** +## 案例要求 -As a rule, OSPO case studies feature: +**谁可以成为OSPO案例?** -* Private and public organizations running an OSPO or an open source initiative -* TODO Members +原则上,OSPO案例需满足: -All case studies must demonstrate at least one tangible business impact of OSPOs or open source management within the -organization and/or the open source ecosystem. Examples from published case studies include: +* 运行一个OSPO或一个开源计划的私营及公共组织 +* TODO成员 -* Compliance, legal, and developer education -* Evangelizing Open Source Culture and Usage -* Hosting Open Source Projects -* Growing Open Source Communities -* Improving leadership and becoming a decision-making partner -* OSPO or Open Source management Best practices (e.g tooling, documentation, etc) +所有案例必须展示至少一个开源项目办公室或开源管理在组织和/或开源生态内的有形的业务影响,来自已发布案例的参考包括: +* 合规遵从、法务,和开发者赋能 +* 传播开源文化及使用 +* 托管开源项目 +* 发展扩大开源社区 +* 提升领导力,成为决策伙伴 +* OSPO或开源管理最佳实践(例如工具、文档等) -## OSPO Case Study Process -OSPO case studies follow a self-service model with editorial support and guidance provided by TODO Group and the Linux Foundation. -The self-service follows a five-step process: +## OSPO案例流程 +OSPO案例遵循自助服务模式(TODO Group和Linux基金会提供编辑支持和指导)。 -**1. Proposal** +自助服务遵循五步流程: -Organizations submit a case study proposal via a Github Issue form +**1.提案** -IMPORTANT: This form is still in work in progress. Meanwhile, interested participants, please open an [issue](https://github.com/todogroup/todogroup.org/issues?q=is%3Aissue+is%3Aopen+label%3A%22use+case%22) using the 'use case' tag providing a description. +组织通过Github Issue表单来提交案例提案 -**2. Review** -* TODO steering committee team reviews proposal within 30 working days -* If the proposal meets the criteria, the TODO PM sends a case study pack to the contact info provided -* If the proposal doesn’t meet the criteria, TODO Program Manager will provide feedback and the organization is invited to resubmit. +重要提示:此表单仍在运作中。同时,有兴趣的参与者,请使用“use case”标签来新建一个[issue](https://github.com/todogroup/todogroup.org/issues?q=is%3Aissue+is%3Aopen+label%3A%22use+case%22) 来提供案例的描述及说明。 -**3. Creation** +**2.评审** +* TODO指导委员会团队在30个工作日内评审提案 +* 如果提案符合标准,TODO项目经理会将一个案例包发送给提案中提供的联系人 +* 如果提案不符合标准,TODO项目经理将提供反馈,并邀请组织重新提交。 -Primary contact writes a case study following the required style documented in the case study pack +**3.撰写** -**4. Editing** -* TODO Group reviews the case study and makes any necessary edits as suggestions -* Edits are based on the style guide. -* Primary contact is welcome to make further edits or additions to the case study -* Primary contact confirms when the draft is final and manages any approval processes +主要联系人按照案例包中记录的指定样式来撰写案例 -**5. Publishing** -* TODO and LF prepare the case study for publication -* Primary Contact will receive a preview link, to view the case study before it goes live. -* Case Study is published to todogroup.org and OSPO guide -* Promotion cycle begins +**4.编辑** +* TODO Group评审案例,并根据建议进行必要的编辑 +* 编辑以风格指南为基础 +* 欢迎主要联系人对案例进行进一步编辑或添加 +* 主要联系人确认何时是终稿,并管理任何审批流程 -**6. Promotion** -* Case studies are published on todogorup.org. TODO Group and LF market the case studies online, through social media, blog promotion, and the TODO OSPO newsletter. +**5.发布** +* TODO和LF基金会准备发布案例 +* 主要联系人将收到一个预览链接,以便在案例上线前查看该案例 +* 案例被发布到todogroup.org和OSPO指南 +* 推广周期开始 -## To get started +**6.推广** +*案例被发布在todogorup.org上,TODO Group和LF通过社交媒体、博客推广和TODO OSPO newsletter邮件来在线推广案例。 -Propose a case study and send it to the team directly by opening a [issue](https://github.com/todogroup/todogroup.org/issues?q=is%3Aissue+is%3Aopen+label%3A%22use+case%22) using the use case tag -If you have any questions or feedback about the OSPO Case Study initiative, please send an email to info@todogroup.io. +## 开始行动吧 + +提议一个案例,并通过使用“use case”标签来新建一个[issue](https://github.com/todogroup/todogroup.org/issues?q=is%3Aissue+is%3Aopen+label%3A%22use+case%22) 来将它直接发给TODO团队。 + +如果您对OSPO案例计划有任何疑问或反馈,请发送电子邮件至info@todogroup.io。 diff --git a/content/zh-CN/guides/todo-guides-contribution-guidelines.md b/content/zh-CN/guides/todo-guides-contribution-guidelines.md index 2c9f1bd7..227644ad 100644 --- a/content/zh-CN/guides/todo-guides-contribution-guidelines.md +++ b/content/zh-CN/guides/todo-guides-contribution-guidelines.md @@ -25,7 +25,7 @@ TODO Github 仓库是一个基于 CC-BY 4.0 许可的开源项目,这意味着 * 创建一个以 `[TODO Guide] Add the Guide title here` 为格式的 Issue,并在其中描述这份指南将如何惠及 OSPO 生态系统和潜在的参与者。此外,请提供所建议指南的初稿(日后可修改)。这个议题的目的是为了寻求 TODO 社区的反馈和吸引新的贡献者。 -* 提交一个关联到该议题的 PR:这个 PR 应在 `content/en/guides` 目录中进行编辑,并添加一个新的 .md 文件。举例来说,如果您建议的 TODO 指南是 “how to set up an OSPO”,那么 .md 文件应命名为 “how-to-set-up-an-ospo.md”。 +* 提交一个关联到该议题的 PR:为添加 PR,可以在 todogroup.org `guides` 目录下添加一个新的 .md 文件。举例来说,如果您建议的 TODO 指南是关于 “how to set up an OSPO”,那么 .md 文件应命名为 “how-to-set-up-an-ospo.md”。 > 中文译者按:为了方便沟通与 review,请以英文创建 Issue 和 PR。 @@ -39,4 +39,4 @@ TODO 项目经理、指导委员会和 TODO 社区可以对 PR 进行 Review并 **第四步:宣传推广** -新指南将在 TODO SM channels、OSPO 通讯月刊和 OSPOlogy 会议上进行推广。此外,参与撰写本指南的贡献者可以通过发送邮件至 info@todogroup.org 来请求将该指南作为文章发布在 Linux Foundation 的博客上。 +新指南将在 TODO SM channels、OSPO 通讯月刊和 OSPOlogy 会议上进行推广。此外,参与撰写本指南的贡献者可以发送邮件至 info@todogroup.org,请求将该指南作为文章发布在 Linux Foundation 的博客上。 diff --git a/content/zh-CN/guides/whitepaper-guidelines.md b/content/zh-CN/guides/whitepaper-guidelines.md index 2a2f82f4..e66eae33 100644 --- a/content/zh-CN/guides/whitepaper-guidelines.md +++ b/content/zh-CN/guides/whitepaper-guidelines.md @@ -1,58 +1,56 @@ --- -title: TODO Whitepaper Guidelines +title: TODO 白皮书指南 --- -The TODO Whitepapers inform about specific open source topics demanded by the OSPO community, in order to help the community -to understand an issue, provide more documentation, or solve a problem. +TODO 白皮书介绍了 OSPO 社区要求的特定开源主题,以帮助社区了解问题、提供更多文档或解决问题。 -# How to contribute +# 如何贡献 -There are many ways you can directly contribute to a TODO whitepapaer: +您可以通过多种方式直接为 TODO 白皮书做出贡献: -* 1. Feature a new TODO Whitepapaer -* 2. Contirbute to a WIP TODO Whitepaper -* 3. Fix editorial inconsistencies or inaccuracies from existing Whitepapaers -* 4. Translate Whitepapaers into other languages +* 1. 推出新的 TODO 白皮书 +* 2. 为进行中的 TODO 白皮书做出贡献 +* 3. 修复现有白皮书中的编辑不一致或不准确之处 +* 4. 将白皮书翻译为其他语言 -## 1. Feature a new TODO Whitepapaer +## 1. 推出新的 TODO 白皮书 -**Idea submission:** +**想法提交:** -A request is submitted by opening an [issue at TODO governance repo](https://github.com/todogroup/governance/issues) using the tag `whitepapaer` +[在 TODO governance 仓库新建问题](https://github.com/todogroup/governance/issues) 并使用标签 `whitepapaer` ,以提出你的想法。 -**Steering Committee Review:** +**指导委员会评审:** -The TODO Steering Committee reviews the proposal +TODO 指导委员会评审该提案。 -**Community feedback:** +**社区反馈:** -The issue is shared to the TODO Community asking for feedback and interested contributors. +分享该提案到 TODO 社区,寻求反馈和感兴趣的贡献者。 -**Creation proces:** +**创建流程:** -TODO PM creates a new repo that gather the whitepapaer content. Bi-weekly sync meetigns can be requested to review whitepapaer's evolution. +TODO PM 创建一个新仓库来收集白皮书内容。可以要求每两周一次的同步会议来回顾白皮书的进展。 -**Publication process:** +**发布流程:** -Once the final version for the whitepaper content is approved, TODO PM sends this to LF team to work on design and starts publication and promotion process through the main TODO and LF communication channels. +一旦白皮书内容的最终版本获得批准,TODO PM 会将其发送给 LF 团队进行设计,并通过 TODO 和 LF 主要沟通渠道开始发布和推广流程。 -## 2. Contirbute to a WIP TODO Whitepaper +## 2. 为进行中的 TODO 白皮书做出贡献 -Bellow is a list of current WIP Whitepapaers and their dedicated repos. Please check the `CONTRIBUTING.md` file on each repo to learn more. +以下是当前进行中的白皮书作者及其专用软件仓库的列表。请查看每个软件仓库的 `CONTRIBUTING.md` 文件了解更多信息。 -* [Outbound OSS Whitepaper](https://github.com/todogroup/outbound-oss) +* [对外开源白皮书](https://github.com/todogroup/outbound-oss) -# Examples +# 示例 -Bellow is a list of published and WIP TODO Whitepapers: +以下是已发布和待发布的 TODO 白皮书列表: -**Why Open Source Matters to your Enterprise** +**为什么开源对企业至关重要** -[This paper](https://www.linuxfoundation.org/tools/todo-group-why-open-source-matters-to-your-enterprise/), published by the European Chapter of the TODO Group, aims to provide a balanced and quick overview of the -business pros and cons of using open source software. +[本论文](https://www.linuxfoundation.org/tools/todo-group-why-open-source-matters-to-your-enterprise/) 由 TODO Group 欧洲分会出版,旨在均衡、快速地概述使用开源软件的商业利弊。 -**Outbound OSS** +**对外开源** -A WIP Whitepaper maintained by the TODO European Chapter which content is being managed in a dedicated TODO Org repo. [This repo](https://github.com/todogroup/outbound-oss) contains documentation and guidance for -handling outbound OSS in organzations. +A WIP Whitepaper maintained by the TODO European Chapter which content is being managed in a dedicated TODO Org repo. [This repo](https://github.com/todogroup/outbound-oss) contains documentation and guidance for handling outbound OSS in organzations. +由 TODO Group 欧洲分会维护的进行中的白皮书,其内容由专门的 TODO 组织仓库管理。[此仓库](https://github.com/todogroup/outbound-oss)包含在组织中处理对外开源软件的文档和指南。 diff --git a/content/zh-CN/search.md b/content/zh-CN/search.md index c40ae03f..0c22ae3e 100644 --- a/content/zh-CN/search.md +++ b/content/zh-CN/search.md @@ -1,6 +1,6 @@ --- -title: Search -description: Search this site using Pagefind +title: 搜索 +description: 使用 Pagefind 搜索本站 --- -{{< search_form >}} \ No newline at end of file +{{< search_form >}} diff --git a/static/img/guides/outbound-oss1-t.png b/static/img/guides/outbound-oss1-t.png new file mode 100644 index 0000000000000000000000000000000000000000..618435bdbb2dc68d57fef4f97ad71437e22e3b33 GIT binary patch literal 331893 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

QQhk;%0?4>1+no9 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 Vvi)p%`z8 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 z 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 S+C5fKT+reB=; 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

!ZtVM|Jm;Q8i^sZ$d6s|`s0bbtfX#}Wo?7)? zN_(I7@hYib+LF_FsM|*D_n%=vde^kkXtEzuWOk#3lp4S%B5!z;O=@!6923fulsuk$ zC*>mg8MQ6}cYOiU?RTG7t?eoECcapicQ6fWOT z*z!L3C<`Li^7~XmbN9gEqbECjQA`g5Yx4a_BJ9_lhL|rc>K`9VE~=}W#nu2E0$hEu*IDc)?ORrIy;zUZK7w`=qZKN@(oEk5kiyIBb=*iI6YpDk;+c5b@e_;BafV|zy2-HIWhi3ET7lgfsw!xFTH4+ z#|HYftJp{0LH7C;CBOiu0)n+7K6T_*`+F2{FwL$^xq zjHf+;9|!Ls3))(@zKVT*Pd{I2?Pm2XOIr>F@qGh=#P2=ihk$O#^W6Ze6z=tPbIcw2 zueajwXxpDsloat??B*lwe83_pQXesH!ePbrDtZNnv4+x+h4D90CC7P5oXowq0oWsDB~9&%euZN%du?(3 zlx%!xlq#oqZ4Yx?POWHQtCcfogBfoYZIbF4bX{3@;XeRv)L?luW1~ zsx!CSgxy$_sWwwjTJLE8-yRS(f;%%QkC_yR2ku4dD$ktFFJ3|u-G!iuqGCjI3W4l^ zkdQkY%0|NAJO6&V&~~`Mnx`BDc6#kCg%cIKiKyjiohfkPEbpvV`7?5V$C!dn!~-=h z>RI8>^x1`b+m05Y=0Tlg2&W2s5E&HWoH77vl0#BPE%~m=C@cJ_KtS0m+a2NXBt=gC z;^_L{7T_&ZCn%q+xtHDWi$^gK++U&2)=9t2o%8Wn64N=Jpd~el*fn}`ANvumW@!}3oxmqZS z*4Uw0lJ`uFyX_v@6Ns`WDUQ$oJ>}ong@P%<%REA zVZyE9SMK&sLr$SJM#a}lY_1({WzY!Q>UE)2GhlG%+iuf-AXiT4_2jmbbsRv?{+CNx ze*#gs0JXO8EBED4c-qQ1{U0(mTXss;a<2tm2bgVYpyQ4ByVd^e?sUpwpdv&WzN=Tjdid_p0Yjn=kKM32PIIVJ>)@codur|UhD?}D|Z+|0C`ua7E1%(7uP5`ewUl%k-MVPKQa zz3);Y^(Sl;13*FiPmvENADaH?ocjUaSpWITGJM0~#sFYhKHk2InMxw}5BoQ}gW#K& zf3g8@(R2UmH-NiB7aw8wD3RcmDRvX71mG+S-E;e-}!@l4ia(VKh`-L912UzqO}nX+x!_?s`KIQLEic^w%PT z=eS4#C0#eGSdl$tav#Lr`8J60fZ$Q4hU%(68GNs=p7i$B7EnUmyQ01jk{r{C)2-UX zqLG|7=zRfb_epFIMCZIAjy0Fe5y$moT~F&1t8*pE!28TY4PSI*RLj&JAUd!v>Eq^4 z(bibb9!Y%i?du|>;RSHCrnDG~iuK{w{o78!hyU$THdKSPMMN|%L;XoQ_w#HefgNzF zT<&V88e`Xufx|ymq0!KZo`%mgipbGR(E65e0^*)Tu+inPZGhlw&UK=c(QI6ZkWTKF zJ+-`-|15Cbt^wMP0IAOK`8n`noDDBUSz_~5(-D)&qzYs9BI8g%GN5+Q2D`kBcfT!6>~Q$pQVNOB($N^9B$_y2ZB&aqt{3fmmW$?@2VQgw9+>;Jwx>0~Hl zr9mlsSVP^iMQqvzh4!{)fJp5W*{0<1V|N}Lh27CFT8j7x0evTD`CY=qa`CQAI5|$l zsfQGZv)iCrn}F+Cf%A~iY*|2}b-rU$!~mQujH&pa`CJK*aamiAAmOb|9Q?=g@&(ur z2f(P=by7b{(!4?=ZE-N3VP~sEnJtsc)8^0zdUYgd=FlqQb1z0fKTc-vef=U(;<8vR zktN6lAGPj;kS*7g7v3vo$}Le|yGV;wg%E{MUCN^&cMh(}J&Hv4U;Ly0=UHGTRf7ynA^sx!ghU^mIBzCxIJsNE!#FRWYygaG&u>;2xDa%}WFpoi@?IR>JG^lvi$mpBlu+U6Rp9bnVu*@}qu zkISzI@}_}jYt4**O#M0-6XhSP>< zMyx*Wm+Ky3BVLPx@H=*k%)nj;r7>vw>;?CH?b-u&^tvf`@aZx#SX08NiYH8+fjYeTzNKF9e zXf$+QYlw3I1R7d~gnzVZjjz$G<+O%Ip@Q&ZsldHYAN#7ckGXWaz$auC=Evbe9v4Vw z(+S>D8?TBZD|${OQI7kt5UZA>Z@Nq<7#IVXxA3tWS|Z9kLk{N`K?AP~bA@a&8I%FU z^|jN!U}#Ca7-WZfht3ad7> z6}5EE-%GM(UAntPu?SLJnlCPCqI17iP}ZZT9M841#Zu{5wDA+zL=V6}uL*KgO zKo%o!`+9Jh)7I6xeusDw5mi|)-oK+Qxn*z`v}x(a<`6MS&Pi~Bg2v!Nk6#3MCL_NL zydjaV2iOL}hMNg9V6c*B1-+hW;U^`pN@hSKt6F&^8wO#?q4NVB$<55?IZVi)KA#36rzw@iv7?eABHc-!#uJU;uze00*5-)FM3IJC@4Njgw^4>@!cMB*g3w-?xB%OG2j)o*_?ZJZU;A-IfESUcs^O*clw<*O8ayre?k zOarHKZP@+Fyf?c1QqPFnYnc!o8MCR5?i0_T7hqJeMeblh8O-h9b2d}#U@T;rJpee- zZKX1~vyyIP1HO*s7>7YkW0f)-p z%rD3Cjc8@ykA1hbceg@JVFu_`J()`+raKMwlop+8m3^TXDXh3Xsh|j*I$kSD9Gf^8=t{+^2Zhsbmo}w?s z&2TB9uSfRQlgCsHKp9&^2Ms?!&mV$nv%hKh_Pe{6x6NQ@#oBP=tI)N{301X1wKfqo z^T9Xt6phC->9}>efjIYfpT8K1t#@U;<_&euAjcNk9_6xm1;+#7#0*5^=v$l6?WCbI z7Rnnm2gLZ@R*{EXdhf_xX?auYqWfsyHW~l;<_l!)V+mSZ3wDfdDaJEH+1=kTRTHvp z=aQ7WmeSKfdSt@QFtYo1W>x0MW4Er9GV5yhWVb zj?;(j%#WdgUo!xH33;Y?MtQmYCsay&`=lJ3Vm01f8s^zaG0PJRO>7<~;FgBN2W56= z@+4PwW~#Ixg$$(Mb+qlmA1pvCk|Ca+|L8458fG~M-W5#_H`lafUE<9fr00?Z48q|tEKeH9WOM`I6+ZoHWK=##yRtjxJsJRd z)lUO1y+?dMs)z|+kgE;_F`F%|zj#jQfR4OA5LE<~9!tn|1$oK1&pT;`@1>nrffV!T zG8vU8*zokGbo1dEtmP`P8Y#29eGy9d0Ix;k4FpRli^|^XN;z^6oPOkIp_d&c8dt8P zZYoUKiXz(R749_`h?`wagP8Xub|Dw1=pvQ8Im7Pj4xGv?&ACE5K^420Cud!;0qG^Z zIsgpR=8ZW?UgXvAx|UnYNp=V~Sc0>@5cKSw(pG<8ApJ6{0&1E}g`#DIS@0csUmALcu4i#|-OMt&iBT@$L#?-3Ij`GvCc&%w>3bZij{ z29FM&-i(`z!VT)jFolzW^gW)rIG|*@`w2@Jj;}PRC5>Mvs8jo)-2Ikt+u$TG6lFHZ z2T+k0MB#g^jNdq5JUab9DRnz}=6VZ}9RVb4cdn?$MCYgHD>agxdBU#;ISKqRB<-b< zw%i)Hx6w1+q#5t<1x0Hu#PDx7LFsu7jZ$ekPuS?K2wLz4OpCBe)RTM}@sw>WzrvJr zk`$b$J_fN=Z{S|DdytRd{($;$k)}bj&&hNk0IQvSp&uWYn(X0owi7{Isw}^u498x5 zR^P~{>|TSm9+;g!?cZQa1qm&YFh%LlC2AT+<}41jZWv``7cMcs$7_sEJ>W*29s6Se z**oFR_oUWLgH>8wZMQ$eku;IpZTBD%#Sp;wa3(?A-y2_9%~L}z@0 z%iuI`n2TAXXPYkK|A;rC5{?s6CBK_F&)Ioup^jDPY}DaSxd&Zc!5@)dR+$Z4UkI@q zX7|iw7OyhD^Yp4(QDv_eTovX%t5N z^Wzg1b4^y?Z^r3nj|+6~wG=ycChUN80KyhJ>c~!9thrS$@i!XdOY(< z$c`f?7a?aWQpwM!{ib~KuCQ`N;^$k#=i=Ds!91?U=%0KvoD3jCGRRa>sJ%2XWNHkB z&de$OM|9p1`|J)kQ{iB7{+|MBq#Ok&z~Qb37CNV1m3zmp4c2d;ko$8tn?a-#zu|=r z?avfGRLqznC~i+_gQ(0C_kmdV+b?bj4>5-bjEa~;t}o<()(qj-85Go#&)}KrvJop= z8>3ttu)cX%sf>tS@}e;oXn5anmJjD!@`T6DuliQrS7Rn(mhOZEoPToo8;Z1&QLIIh z$Lb;B86%`&Gi^BM9y_zz347{4_efh}0Tx_@sapK`KU4XNEPp_XH!qA(7$cvQpDK0T z;Ehhz-rCPjRoGsOn;%R@2unfw?SSD*$->v;PLu5TB)3IXp31sYzTc2nCe-_gzl-^X|48zuy#QgPFU?Hk!nTIuFR=AT1HPA zs=sR&yC`NmcEOa&vJ509$#*T!XUuVFX-H>njV1r~PMEQ1Nfg}aR zsu-k0kMoB<9eXHg1v(}yu5X+ImdN&WuB<%~nfD`_=|}WOwW)YlI3xzFs{K841Mysu z@5Uey)i{jV>syX?3bR36kgB^8RZLc z|52IY`}37E)^i8tI|H-(kJpyA8tn7|T1L4rozcm~*y=*tN%Kw03mAv2z?=@9vOt~@ zAaaR*=9m95;xB8I7rFTNB}i`(3rrlC&YSWlb;%v@_W?s6OZ#rL0D-B+-fOP0Cm!v4 zw=h?OBk!c61|le}@>=mgt>6-LG2^*E>9AFY2{oz{C~LAAw=WDFUEE~lrZjP+%hr)+ zGLQV{4&GUlE51oYL|QKWkK>}w3TkZPejaW(7n@q^E2hV<<E#zYWEf|&Qp=1E+1&;2UGU+jW5@J554IdEOiF82H+Ul(a!qvagX}$Nb^LGGH&tMy zr`7COhF{zW*}9A0Dx9Cg>KEO8+7S*%Ii7x8e^NU-U_p`ajWR%w^{l2S#y_sP6yd4# z#dFK2OXQiFcJE80RSPOKZ=jzuma7S8@qNqDib&=X9iZ>>86ohN<%Z9&@7GrtOsbpH z*y%Gf+L8b5k;bgj5vph<6s)*p00N`pqNn%i)hUU(*XlTGS+w#W(aWw$aEWEGKBpJ2#O>Yiu5#mU^}yRG62r0e((njHs|k z1gYK)>}!$b=T=fLPEPZCdiG|tIG)S7qH~-YJG;>j!s&McNfaNdLa+#_qXO}#lnLv6MvA9h&^efK67 zCN4iq01aGV*H?TtZ~%7uuNHn8x(Sn5Jz(dmQM*W_`8s6)rI1o;Fo&HtRJ(i}LwJ@|u zjzq1UL@!HqwPK^K3^>0j?bpU2>@~eucGJe{;Jlz?-cz1wnmW0db#h)Kwu zKd?i_Do)g)rBB+>z;hB;AT54 z)Kn(ohIgnHfzxgUhFv0kr=r)Q?@WgY@0ew_t>HMhsRK6VA$46BAIuI72)88~vcOu! zIN&*)O#<6{n4+^P#x*JnSGMm{-A`$e1XEYvQFaKhBs(F7Xp!G_{x@a1E7in}2U{~y z;I<#1w|VO{McV-g^yFR{%BnF-*tkN!EP!rEyK;(u)12E{G+<&>gLoRF~I8iTzy$-y5*uw*EHl!Hv-$`m+FFt1DHn1PK)c_ z2L)t`JN63%4fxjUh&NUxpD+i|cBJ9>2WTG_3;{)>rb2TfWOhpdWT>nVKMQe2$L5!0 zkDjo_gRQ}X?9>ZaduMpi?)>FweLOQC?vjvie!eIYxpz=MEgWmYUYYCA_Atf>NS9I{ z0miP{i*ohD+DOA5@27?yDox_7w6tqk$^v`s!2o%FWRlw>9uV-=O3{swd6Q@xy@**j zlL77AyTP3#oS=j`#?j97_HovJ_*g-cLL;dC%T8oWiuS3|&#*Q?-J=9VgfgSu&K7w% zTVI>MJWiYSb}Qs~;x5QqBe1gdqWU6qTa}Va`&vCM@6xNCVO1I&-KU|k6$>UzzUNVC zFP~6on!5xDun;bvPPS5+X0ua>!><&g4ut|!#K<2*dAp_-3ay@II#f0kQkF*R=E~P@ zfefCfd5p0e2s=KYXm_#LD8H?5X79f&nCI&iL;TJvnqCBpc#iE_pOn-;VZlI@!MpF@ z?;~zCIlmg?^X7sFc50|`OPC{NWcp4F>qAL%)2#NFfV1CJqda5gNUjAsfkOfha1i>Z zfAFmvp^q3_SQN4>p;SwOLo03nW#tcI80NpO7+VAPN&FkHfF`Z}LpSXQFi`ctM`yLLog%v5S@OpG+Zgw?1 z!Ox<;hyB5e9;8qF^g^FwcCC)~=1y?jAcjA`;7z8-6}au?b#&VCf;9Ld=JJsR(T&60 z!(U%zIN~AHzX2-IU!KFCLH#Ae+CELh3JlZt?v^4L`l&b`1acH7YZ7PeQCwdS2F=Aw z2hVE|{X^v{NI%3T3E7Ss`6=A!1?K+LbGbwF4aq7p{c3aI!Up4Ui#=}iyApzNT*MaP zw73PR3o^L^jWG20U+^0Dsr*za$XN?;nYyZJt`_A#JD#EsxEdN%PW3u;efXhtkYKHAV za$HSn(3$nvS7#(I)x^u{@ekOliN6?N6tBOAkj83>#GrwxkYK}}Le9KEs1hjjfK1o! zE~*mcrQ-+s)2KF-$S8#hw&5nHBt6BE>~0#9L8Jes3zW#D{Spg+zqEV;c2}ffYwCb| zU!=(<=+j$$|7}C%K-;nJS&y6ox?@Ii&73c)$+1(Py3VTNKoV<@pM5?qYc3R&D8_IarNr;hclBd-l2Eg3IOJ9e}oAKXg8>w zQ=Uqi!??lcQNe-2UN7@N#_#SLFN$q7y3(e~=u!O=;+Tr5nE`=o=kaTH3V=2@ke1ru z?zGd|a;0iAH!SbiUe^DzlINr zUR}zs@l7AR^ZncJN9**9SO_x!54Zd2ri-t=GL!{^xW8dMd&7?Uh40-D&pGb8KH7dZ zKPbWE$8K`|<8FrfV4Kcf3e!8cLv4%y6vr)-)o)UF9~qYx@tt}(HqPXJfM4(7h>`J~ zpFH+*9!?P9tg)!H>6|_QCQURQ@qS)XlcEL|Bg2+VuMD7{EtoO~tE?l3{}o3&vz4%9 zYJG0BB_pvbjFtNce(qr!+F^bo_cjTJD&t|>+f;&2-|kYl$P&YuP*2qjh)kzhC94N> zwit(b4L@OpD9dCt?7u1mz4>sf2NN87O;+cMRuv;fvW4bRPR)k=pU~PPa=cyB9IkSL z&MKGdo@qqBafgZu`Uz*~ao?ybcar-J^OKg!NuQ}yO9y^_uJIX*)fo$05}bA%A#+dP zwKiVeuec?42|-LcWQA%f4o^X2K4XTk|KhSe3b5R!YpOO7RN86$`b?c0aiN1IY);_k zWWxRu?7!L}BZwgU#9+dHGaC0_L|L7VYP~~lhjDYd;oh^EN%DYji!0*k#zKy6_tR;c z#Bwc-mkbEdyJ$V7ag1qcD`}?G&|jr{EZ&b_{0*2i`)?079p~McfOi;=f&i(m)+47& zwXBm6*}h!f#k}$?{iQuh zF>eKYhHfLU?W4$W9tSRprW2GPs3O?}Y?&I>+OuJoA&6fJ#cuRoWf{X2^BK|9TF-U0 z_)>M%s3D$&0rjYVd7iY_f{u9X>E@gQft3vu?7~RJ&hhH^Biv7zz@&6e&irh~6R?mo z^1v<;l(YwPsT55AiQkmni&jxDX3qeQPWOy&-)_rYKsj^IBy~4<4%i84F0{0Nu_viX zm|d(*m!3Flnzy|KpTTm^C=|SRLr~f?GZ=v48-PDL?ePxHB-9JMOz26C=8Z|9Z~JU} z4-5Hc#767#wOHPQZIY$q(*Uyn{$>PuOp2CLY0|$eBK4vKI#Tz;G;tEhW;W!uyHw`g zWi3YD)w2*u2_PUj^$LtD!IB_br7z3+>{qFuO!bc*Q=+KkK9ak8g}iiV^Bj7bU)RsZ zaV?%*P40>6@+icA`e*=FjHRG!aamKS{;Vk`MOW0W9avtK`JZ*?Qw*n{qdX3MQLX+@ zwk_w9Hp{gSKc0;JS*=sGSQ7+)40`hZPZsGBRUVd(s|@r-3GtKiE1nPLtwR6joeyWB z-li|h=%xRi!vF5VANJw@v4iw!N&DEY=cnaXqO{;<2Z$$r6b4TwJN}TN>Kw3(glViR>c0>r^pOjVG zo6fLJf{a7y<4w?tg>vqR>z6}w7k>J1$i!!p&b(YOL+i#CNK3iQoLK;1n@ea@9Q;%s zj=$3PP2nM99?Lc@PyELR%Z?7fhXQyKYfS<>NwkGx!Wm!&&^kPyxnlm&r7Feu^Nn9O z`wIX06u7(*4l3B{b2@Y#bAiNMKqf=D_~yuDyB+=9iESo$c}sK6_~kpi z{L%ADGWx}=;ze0CDut2_Dko7k+;Wd)anXf)D!J8G(Hvd+VC1HcXqR%#{`oAHeQ`su z9JRA;U@8@y_fF@iw{)$RDb0nDS>2#Z47cdJxko#4KU+^OE2iHk6vLwYYrZ>i*xapa zT65~A>g>%@;Ho;uSwB$T?F8Yuo!HLR*o4sx&A)tX#|`u`gd36UB&UdI$1|Jku40oy zRhA{-@>iFruTNMVygY+mGC^VBiR(l+lAAwX=gl~3*&?~STx*GzfBoiQ7G(ozzyuY% z@g|_1_00I=Gb}9o9NDSdM75YPG zUgQGF<;UP}9@kef=m9WLT4ASL(;wdv(a!w&I~0gQx5(7x(ApDQ7t9&S<*z?~b@21* zA)mQQ%k)BOv%`;b;>W8y%2xTG0jeD(^50?rr_q-z^h>`Ui_z78`7^Q~3dc-xeynv# z(9W5geaH@GVObRw=acX%BlL*Vj~&)KoiDYAZ~0IA@+N!PbP<-wjgP6YH?an-&DCcW zz8CVB|L*thxj4r5Rg58(GL`P$_YM8Bgi~}T@aM07PMS|8r4+KXr2p~kJ%4>e+9|z5 z&qqbhXZ^7(1?}Pwe_GlcVK3^_f)Kyzir?3U>JtC++9=e2-Z`0NQ(bW%t#t{f_)N&p z&liP~p7R~IO3YCHHAZ}SdwKOn`F>uWa?`Lsrhi*wRIsu%Xk;jrkiHvD=n+SL{4vXo z*EIE2YBPWXEn(EEQ`@2C%{Do7^Za;EF28@T<>7^Lwi21Zh?p@TlS z>Q=D?^)75x_K+dXK8gUMpNX+NFGC%VBgM3 zqr>j2R4$0G=U^E*WQl$k`u9ojaFc*}va_mre~E%WvGn}!^p;QI z|Fye!ezBL|Cb{Z=ffw=^7}F5SDo|rkkq^Km%~vkPPw)Ej{{fs&$qz6YsK$J z%WwQXDe!Oi5?wcQ50>8#(f|9y2%JXA8!HH1&DDq(Er+!rGZV6LxABJ6T*6gc`gf53 z2GqxuI2*rG=WG-vh@mXnJnx2dNZR88LINecx5!yW0RU1VxE*jR2}>kxDp9I219LXi}(N zh0~Hxfln?0rJ4kM@j+1SJyikasTOqMP0Z0K6ze(l;>0eM@gV&TmPiVExKbo_h= zWvQb*w8w8*@Px)MDl7d>VzW{1)7~Gohy33zsG*TA@C9gAQTO9Zai6R8c1pjW26iXugn+5utnL(^-LRi<9W-F`C|FSJz^yjJPVC5R1OemIqZ_kBGJao*UN zCe(s57;rz$Cz>VHm{SBCahAlKVfL#YU`d&|fa0CC|9n76-){v%+vCL9emRn-S;Lv5 z1=6iP>xwn+Ext;QtI*Y#N6~NKL2Zv7P=WlJ6>Lqu9YrHSRWr7xd_%=&+4`2!k z0b6P9Z>0rO_3EprmXM(7hMG(X6n{IQD~B>kt_O4%6+S?RsfZYv4gPaOZdW!XVDc|q z0&1;N08gKuTN!%zDil#z0a=q9Era;-ky91Z;~wQE4Bn6N&s%IQrPRBXy0sa_$cyH; zgmex;YR*UwHO?YRHVBBG0#1_-Aj8@{Zvj!9muIi5D$i3BOQFWnK90FP%B=qDm}|1g zPK^Itk!tiUs;jMcQOeh=9_xI$PEL8T&lE{1bZEv_wC!hX@&7J`o2x9fOO7?3YqO3r zHx^R3wo~8qSW*0GDb#DG6sX)Gb2YJGlgP3}uTizk*Rf90WuF9GNSQRjT}r)n2`t4| zp6iGyKjziE1?ENl=W}8?{r>2>8|z%cwyQA#LTjWMLx{5s)l{v!Fp{B^oOxI1(8)b; zj;?(J<}V3=G<}0 z3>5A_8S%bk>3b6e$kR%n@LnXgK*MiG({Q%;ORsHe z221?eN==~UOaaUHGs9$W+FtB@GOl1YD1J7m8_%4@4-3;Yh~Qw&4IbQBL;rwbT zx9VYxTtnrXg-_Hm;*(41Em}~=qYU(#vFUH(J2qbj!)0f5#tl8Q!@Bo1`Ie_QCu&B@I)z@qj zf-FTIq_1|ro5wZ*cccaH>(PTk!ozYrCq{FSI5P9-x|LWN2lcq)03>O8yZc;*W7>l) zU5gMzmm~ug+Ht~WUQcMNm zv2mMKZSM%$@qaPoq`bSHDyU)nzi>Em1q&rPY?5`_fj_fl}#DJrF;4!aOECc&=CQRJT*3Xoc!j!zmejE-xWts4vPhKF-$D@~3$`TzK=l zz547A^ZVNxE^#Zr;!j#wPqaP@GUX`cG>Q8eoFMymK7b4 z?+#nl(!(s|9I8|r3(}$Bihc2ay@g4$jc%Cz((6$w2-bbp3mq| zM6vD639o4{K{uWRe9RukVhythh|0CFFP{rd$Eo75eQpNESSN|BwcRa6km!_nH+Ma; zCYKIw-X;(+qg1awW_fQWrDR^4<-1&)2ap{ffUzocO;d``zKTIJQVB(F!Mr$*tLCpx z*_V=;-YDYORgslcQTcfkMsaI957pYGP{-m*_iw^)br-f%g0zXOaqOxdMF*3;nga1a zDPMgJ;g|&F?|SM#-fw*^dX|Y;FyvCd;z!7@gic_xn|tmQ#SzJxvFy}B?!$8&RVJ9@ zBji)jpJ}?#-~!v%%&V}moQB}~-KZ6P+r|7y5S+$GhDC?DFU)3^xvaY*xH(1D;9)HG znGx*+LZAGbiw9?{`u%;BrU$Y$gV(4yav02+T?nCZHc;rK!^Z0!Z|zNxXe<~|1vtMI z0E+TGw;SN9WtulYy=*nt+5jwjKE9mA*W-Ie`Q`Ux(wApY;;^ejQ)H*P@1AUX%e4C= z!c5`KrKG5hpW-n-;33X$5a+wd@wcC z3Ay;=)<$??Ou1(=;T1O&EJ;GYuKf!517GA58>%(u&OCx#bxCou>`7lG_5XhGY&Rv~ z_u0C&con56gtpoFF+dDRLXFc|fFE_uaZsfoURG}dhD_vDxAuMev=umAq9SMP2uDcE zn-`@qraW!P9-#FiOwE^lILp@i!&deTj1is9!TfI2yqwYH2Wp{86%>PC+= zk8k@TH{o-5%pKFuqC*IGSBj{jW8OZPvHms_Fx!X+aOzz>3~8Es*sbWLitsZeNB)QN zy<3n&i42lZ!Mxy_U5Agzr*Bup`rxFc*r?NA0^C+c!a3Qbc5QO9^@q&rYXYIP zY;)1DX*z*1L@;J8YMdyJ{r#Rs%cfn+>{v-H-;_|(mdDp9@he8os2$Qn&tKRLz?SaR zgOumpfsLZXa(f48oe^o-dgkqAqw(eNEaI z%d;_td1Zw^35U+kJq>@<(!r|Tkx+(>Q zZr_@HAOBp_zmr#54YPs-heW#pw2atp495ZI+tzMbz*Gh7HzPETA9SJ z>i1Mwr>y%1>Zl%0+bP;tA*p};pcf?q9iFR@uM4~>I1BI7sop;Fuw zG@A@vwNG(vZTZVefU%iBuLgAX@QudCQ7GGsR;Dcs*XZ zyVqQKYtOKaWyEC^i+(LzhaSX; ze!=e%b^N8Z*w@>!DSUSO?IFwFJo*VsddNdJL1oxS5|19rlp3TcU-q8H$}*1v{XrfQyov01@}b-Dsrq&xB=hj z4?NnXtcyB+#SG8#;Q=Iu9rODhJ|s0=1rXH+RC$l^j(Eo2Bi)b&(0kRheKj>^B=x$L zZ;B;7e`28n8C$InUU3X-$*a8o&h6s#HmyvAoSPEgjQnq?t~)3}c||l=0T( zN-5$(y5XNBq|j{u0#BQ53BGFzQc|}>2F;}PmVWAtQ9y*~6En?q2WG5dWxQVA(8*ZM?(2EU7rH`vl6kXgf13>#so|Z3iv8PjoH!3^6 z;omG%9MiKMBOZI=K7b9<_V4$e^1+TYW7Fh;Lt2X&OQDStXUKKsP*!Q0e?d(1IbLvI z@#J%!FD9yKkE>tRv9uP8` zek=QF0Izpib!HiJI)4!W`7%rU5Sr437uJA?{73@u1C3AORE5lWgc#$Y}g(gzr^> zm_j!=K40$hK?-Jb>~%m7M&9$J_IrFT*GaCqpdP>wt+G(YBY+$#Y^^TnohgI^&If!5 zgwQ-n&@wES9n)sh>p62=*thtEjMtVhYxcQ3X;H^?{>Rgy2fpkCOw8k$wb?~sX!uk- zShra(FgxZK(U0dvdY@QMny(mH>+>Ge!ke$Ko39rUXw30+Pev0sL67)kBv!wQxfK@^ z#NB^!k~-vhB2Fpa1NgyQzaI0L9xbG$XJd||Hgh~pX%_vfRcGH7To04btajA!EA~Fb zPx*ePVnkuB(*VnS!s*;$OJ#HRda2^s?z(amW{Nf(u>{a&w=&IBzb}Ks9rb`r#78Py zxa?HCj3NqvW(U(iWU(0CmwTRzxOVn?&CeSb%*8FhH|%aWrN1TClEl`_{RJPxo06;h z`0}KJX|c~7wZ}SFOU0(ZQ}wZ}ryx4LwHPj?F*RM)Dk!>BnuzU{Zy6FDe6pP<^^ER?!%feZw-|29*PXRD|P zlpTF_K>MxNU1F`RV&qwxF<8t|H^-}|bsVE^_Ez^U2|uMlkyd6Vu`J8#amM$IbX=Sy zw)z6p4JYEucaEdBsk;x)b2OAwx~DcBUbvj0XMHznX<>#B3~h$(Lbz$+bqAO&@YY;@ z0qvm5s8Wi(Zkva_4=+lTgVwcwh?=AK+b9EM_ilkDfT(N;`0Ip3&0)%LumNK$uB2)h zWwg|A>KJo3*t^B|QoTR#-DNS$RoSv*oJh|*vVmtL=x8GS-WiZwXbV|d_e?&KSyPki zeV2GI7j0m&mu0N)^tV#b*9LqEjzD($Vz^JqbcA%}5$oiV%9rTD#(BAD$$npeh#6tO zbpf6xlBDrQ<^9Nbfd%BA`zVdwk9P4UP!NRkH~P>L#;wgEx9`PT=m|mOiN@P?`}PA4 zN6>c<;keXv9Y|XHrUQ%)`?>yGX4Mv$5eqHP_?bknjIf1W1e7{rSsDlLuyOLkVpYxJ z2}h*%Sb9X}U!*LgJfr<$>jbGBYc~ImRn)@GM5SIor&KkEb$+sIluf(=L#4%*9hTDQ z`u$c>tb#dBua{+h>*>^`sJ^Khe=@fxNzUFxQ)M)ItDrW{<4?FlNI6p7Ii3RS}sxMn{r*Uq&=Zx!QN4!qVfAw-Kg6Ge6Gdm_C*6< z`bnuAXVpFjlvh$?`jor-l-sISp(xitAiA69&D1Fk+NwsAXII2R77C1$&Y%qmPJD4r zGeX|moRamL3QryKQ{ia5%(V7ga!qhoC(}^g*xVrZN}r{QZI1rL_%{a@Voc8-%^4IY z&>E<#wtsChth(Qv%op4AsbHYitFY(!w}~%M#@gLzVp&}+=+zsp6%5EplOs!w69w0@ z@R`7S#3vqmt)8lMF@O^xe_oqNi|2 zI`h*th!mst9w-Kz6)4%$R^*a^s8dkZ>k7`fGbrXg4&2jt$2FQ#EN$Qv^rjQ8*hYOI zKX3HCr<%;c2=nwI_r}-4 zrENP1;p~F4gZU{CR_QR1j&IILpg?;$T1We}`u%A|F4ECEH1FX8CNgtZ%k*?VZgJ^2 z17jfP{yByk{5LmMyi)O0RB=QUT0LEB{P#;z$^G&9kVSSAjJcnpYikdKg`N?{CWr!#L?$Bclbcs9wwJKF2%>;MPY1~+ve<1W6 zkzN#tZ&94Wr~e$rB!GMs$A>y0rVJVw6l6yREa-`w_f)aZj?iZ}=UGyd;M#8-Gp75- z9^Mu<=a7Bh$x~}kHhCz9ao7bp_b88yNI5M7YUA5Gj8d8kl8^J%Qfw$tM>{*^oit@Y zt~b(1nfwX(l_>0AQxkvWCh2I$P`kJtIw@7-=6SBCoIaYQH5E6yPl=xP@S|j>gxvEk zk{+y9rzLj*k4+Xfav7ZP^eh7rx6tdR{Z6AQhV+umrW1@Ho$kkvJ2HFHR&QFp7uE% zrxu_0FY>)SF8bW>?bRi!p_K111(a-Q>8q4tua%hU>B6rr%a7A|tW2F_ob;838X2Xm zVw4iypfmO11fZQ%fyk760=gc=JF*e^Ta6)=Yh7BpcWF7aH_t^CMcL3z)41jr;WRzc2XnN2)kqu3n&9z#B)=wfo_6VrlKW=|uq; zH|_|x(|JdFKfBEt9kpDt{3LmIM=FR~rHVb2xmIdXRcub4nK0sd<-;tOv{P#J4a(P6 zW};%v)L-2hzAvE})o|;FQrC!pZtddPNC`!s!X$&pw589y3aqx{?qy6Tgl}8keLtBn z3*EWPt0DsirLYS%CqG|uoG>L=pY?ozb+~7JtuP^s898C|th96I2R5q7f0jWt&^cN! zCCKHCM)=BmaMeJc@*90vDEA4bQ89l;tYiC9)#_h>b;2I zhse4aMu~SgsK%~u*XTIzA z@j zw+DmJGejUewPUL>|5x^99iHa*gpHU_euPUQ&ae>q2bwWHHOq0bGGqczbXV2v^_%Wa zg2JySW*83cBymme7f@GOq)&bT1j-T+0yB`(ai<<|0p3T5Hg5fW+@`d>5%`81s7lz@ z!#_O)Wwh$5mF3fe5Jzo70TmQF zp(%a;1kk^67aFe_@&JJ#M|CSF@>vV_*3^3=%3^~jV!LXa3yNu3Ed9n;Jq zh<*9`*wIPtp}GY}+BeX}iigGWcx&I!RXS<`>3T7NfA`=s@%Lwi8yuf@K5CJ7e&*C% z5H^5stQxN&$BB%}2;STz7#nI_3gwBKrpxqrR5S%_xX7 z=(xUp5Br`C-4%EvdB#*?`OsF~&R}p?gb}ZyD&PGe>=@g02%ftj=U9{Z^{BR!h1QVY z;w<$dH?kjTXRgk8X<0Y_<52t^6v5awOe2K~*PuIL%}=C;<|%dgb;P8HjxOP7dFa() zu7Wb9fsiJX!zPst1y?kSc*O(zl-LiLX^WOv)TiK}pl8XsR!t*+~^)SF~b9 z;)XU(7-#{TGj9cZLMS4>8Ym4^IR*I!SNF9e&?`EjpXWp2t+)46F6LJS8Jx~Ox^#_K zK}Yc79sb(-C#@ltbZI^FtT8J%fXz`GSsTAH7}N3Bt}?WPYUSeg+CY0GtP3chDVK*!*GT20M0@>kv$S!po3+QSzn03s83Av<|8xOdz`|@I zV$(s~JpxJOo#B$e<(m>)_78@Tb8mcxdR=nF(<9$Cixstj5fP8Qe%N%TFyAV^*&?kZ z-J-D4r1br&1YGm4g3;noDs39%JNqM<#1HH4_1L1rQY%%Fe^T})d(j^{rnj+qmt;#DiE!+~`{|t~X#x0s+ra{1ne!7xiH%@L`iT zHx*ImBTr?kZ=J8#q5tbJC@A^wq|dUVho+*tps-O^g@$}=UtG;bMs(tI-0atyS$Qm% z`erZ@fL!6JooE6fox=}2n#^r*LxeK&i36Nt{6Qgg4M|dB&nM4Y?mM$wyIP-f01+z1 z+6#T7hbQkrcCY-jK_dggA^t9#$CH}sQ@eM4R(~^+K5IVX2q#}6bPo{#PKR5uk)|qw z{BWFFl5*&Xv{@c3RQ0u^umBalPETi~^^z1$JsUba6YvI{j)8Hs!Nnv?foZH@1nLYS z&2q(xo=0J7v5a}w35ssXBU@2`H&@L(cjJOCVPpd_qfhj@^(*Ao`Qrk#pABdyfD)b- zmP38Z+#nab!d&My);u|KASYsYVbxWhzdC{X<}tmBv+L3-=RiH)T7%EtkW*0&-8G5& zjVE)zEF+FN6dN5Bp+sdD71^=x|VeG2(Ha*&!YO(R8TPR#>_jwW$anBv*Sc zpmx8%f=;h3-lA&5yCodhwsSkGwz#ypkIcXYPbd-rEAs3<6r`&1^>~K$HopMqQ9nm3NkgLCw`Z7smitT_-_pei5ypD2bf_RDmC2 zsO13q>TF!{<~)#gDYm-T<`->1fU03gy31fMCPUG&ny=9ta2A0e_Ryqx&y$0!@5>(v zWiljcU~O}7jl-(&2R< zDuQA=7V*DBX_+c@lhFGeH|`r;o`svfMq~&-be?APs!=$!it9GmJ~DONS&zj_0!Yqizpyb~N`7(9{RV^{1N)FmCHF7QmR!>VvQ5OXc&QYP zZzzqfSz*lY8Zz~cIt)&|P4E1GT#i*zT#(SchU6nG=0DL8CVxfP45UGl-+S0Jnfy$L z*}vzNj-nUDhCG)_6Z#uRgBMv5#|(&vGnb}oxxLWL_Te7T;2$mimQSqCP* z^lyEIvB}T?CV7zXJoVG^;Utcf9t@r!5lqdplAFqxU%JZ9DAok!;Z{P!iecKZ`6o8T+uIGD1b}_~=(>K$D}AnwR)psps1yQ5sis z_?=+<7bZ>}WD$DrEjw{}l=O8#9a2ql*u{q{^!kC30zRvWetu0wVydW?tkc%()~*S& z=Ywz^XU&7(Y2Uyf(h3EEdDC$Zxw*|G$H`LKPI$JOVdRwCzeTk3Oo8VJE&FzWb^rB( zZ40b$Xn*`TdTFAoq^0UFXN1=R~t^p$Z<#G`%e80aWc19;8)rKb*O=P7 z*1vX{Ws~XU6|_DzPr)}K=jak%ZAu4LeoxHAm^;HLW9Y%$ zhhiuTKbl2nx#5LdU~Y7ZC&?>@FiZ>Q!Xthow_}pI)#v!t63=;VM?<QVa?!e6VmzZ(wZ zRa!X%d7L&^ZKhCso58thltVLU9z+$3w>FuO(F*gnqJ;Gt$Y$d&Q@ZboZ|BaF9+M=7 zIyO{|-*`nh+imoAbhQ+#y-37ejQ)hao8x?EHecxsaohLd+P>+IK<&l*d%&~glj`Lg^g52Z3r;nkm!+Aku2_g#}idAX_n$S_BKmK0G=`mV9W*N}jywJRlT>c)Ygy`nzb7bba6 z`{l4u)&!{Wlz?3N{V2Ls+x=x&k2b(XmpXo**=an^<{-E$0%&Mn-LVGc%q@x|%7xO^LFd(ffC+lYSq z@H^eaJe`dL#F_{S;AOz;Iatgw4vJX5d3JQOWNeZ>C2 z#eaU_=~E!N?oqnW1K;e0HyySprduGzgFvL+Re2jFkIy~uLDxP2aGrgn2;z0}bQ1F8 zmedjf1s>BWj`8)dHd1B^?Dpa)|a0E^>xbq6Ut-2X=WWb+m@R?S#DZ% zFh?sK2tTSMVZ1`!gaCeXoroY_xehCc-%@8Ph~GM>e?Ki%YVv|q!pzYxQ0u#`^Av;M zini$zu0OZwDg2;=wVXDiF4ROJvakCu^lgb!!mm@MW?oCl6S_7K;4LT$09z%r$uKmc}zEEzMlB zY_UIk^R4}J^HIZrtPhA~P5r&WF&Ngjq1kWw-G=Bf_9R*TJqWTj3`vdN&`sUnkifuj zSg7CQ$(9&qOPBR*1<^bwmHm-|=4`TRC0uB^eUT1`>nMyk7*clryzEI2p7(RoH;YFD zI=l;2j{^byl{485${9$nuLSu&<Glu8wvgQ2+sv_P0=d?7>J-IqQk7$ zv6?9ho!PyvGCWPr;}F7OLzATJu5eS_2PsoVA5sQtGusBT6Z!Q1>>{}9GnHFsk^G?u zYqpa$-K8^I$}%HC<577dkc{lgsyC7&d=Vi$ayl=IhV3oKu#6j8$2bde>DkCmC4l zDMgRwCy6u>m@Kruy&v{YAszKDQ$nxlK%bSB4*ihM5#GvB4|6c8=T<`baaMr)hfRmi zJf;a^k45Z^`V2~MwW}s33{8d%$=p@6j^02k19k4H{HfrEjn5t&^y?CgSr!TO#`k9- zuRFDf|K~|TH_{l230O3+I9=BW)N2E&M|MF@#is-nqcqJAp=hC9Gp=a5ptyidtairJ zEPQ~a=byUR?~MXciSvg&M@Enz)sXy9?V|uEOjpqvRY7`Aqia17s3QMNJi;ys!PX(h zM1dg=`hX_?p7d{%FW8UlTE|qiSCdtaI^5}j?FC+xzIgWZIz=V`8L8(fyh%$5%9k_q zcz>P(n4+EM0dp6Cw4A@SHYS^A2Ecj~tE=Qt%$Pq8bf)u8a6i?mu$Sf5Z_Bbc0Knc2 zR>i1FW<>%6t~$6fSex~X$atpe2=DTBM3WXM@Y|&6WuP0}!Hh*Oo^6iY>N7Tl_&u6S z;rV>*=Rf`Z`L{r=csW?*l!6eHeKwI~RTR%uL>9Ap_RpRih8{0$rtMf8dn<1IZ8k0e zYFn!WX26i`HG;N3#|EFiv)jiK4EoZ3wrNb{BJ*p4o{}T5}m^m9?jY87rn3l z=Zijjp93GS$%^cX2k?gIelFIMcOvV5asXjm-LH{__j0VDZ$bxb$qe@9%oX+pHi*z3 z@MnG<6j^Agj&q;+3_kN#@n&S+6YL0-J;zaKa^sGa{D)Ol?KFbaYt*k$Yo z$*f+0M{N7SDfX*{{`u;;uQmSX*ZzO>;V@;QrkrEQ4*r~1SOk}Kx=`=i_jB(4um4MQ zlfBjL~ARCj3|T05mHRTT%-Z%xyYAp0CBC@16S-Q~-@8gn+10O@u>1 zmE-XJ`4jlxs~3Mg1paY{oKXhb*^J6#X#X8-#e z*Xb|7ynPoTHTS}+*JEL~PFgO;ysi9y@$dGOiF|V7Sgbx|0kRZsN|?necI;>zBeUB2 zSk1i6RFX5C$(j<(=E?_C?9&{3+3$ju$g9{E-_z z$p7&rjNu|WLfjx4stb!bA%ftj0g#^(ftun9tM?im!y#ROrIkmtsuLivSc3eY@-6Lb zLT)7G+{lLwA~iZJKc}s$fktpBCm8yxnP`H_Y2KL{#4#)Z;JZeC8;bC4HHgrMCBY&` zSrxK6s74;n^oBbJv3g`taG$x9>HhumYouhUmzy{?j+EXe{$*0L)6)aFo}ro}yG@UG=>eF3{CccAA=Ox|vV%_y>m-k) z;mmPuSvTMM+AOKXCgvJ_ki!v~bWO67 zSVg)N&79vqOH16rv4hi`L>fvk3z~hxlJDP z>V}^G>||KY2h6MQ=l9y~VYq)DflfnKJc&U}iz_&1PjN zcm}UXz7MN)STkKHK2`D=>8UF&VIleH{jGw)j4v3h15km?>CPLd!(1*avu?V%`#4Ypem!yxZ;Br?UX;^9VDE@LMkPX ze^);K`qO&UWDVF=-zBFDqWA~dqqyUY~9!7DU6JLhrbX4;{=5(}3I6k5D z^g!dF&DtRlE5A3w^UXMB^4$gm>g;_g48^fDNhba=x)lAxpdG4hD&8M4y!L@7= z>ZrlsKY^`kKRqxwUInHy5Jj>nrfCNK&SQHQ@_+0E(6rOhx@3GBfQiu!asq@nJ;G(I~@g8cU;)G4Q2@yeEI&5xC4oMXds8>X7~ce(9& zAadSgbPX%U@7ugz4%MBTiZ3XfqVA_Ua!^V#fBa#P49?-9t60kllQ-+{FK*&8qH6QE$xI&FObJi@DxG>&UbngPq zX$gG2@n&t#9v|*W9%qANMfp}~`XgyeOLE9d;iIoXsiA38HzbXmR%$vo5aKR%LwQsN z*_cct(Cb#%>ezZGYJ6XtJ3rR?uwrKWEO+b!l!--+1=@X{)iV%8P0b*y-q0WCO*qkm z{}0olj_+&*oam{;lLOgGAAN$nwd>}u(~aTk=XZBle$zonNQ!p7k6$_T#Z=i$>%5v# zhCUtm|6kr|COTiPi<-Ceo}x86xs2(Z_FH6;nXw>&rv(nzmV)E!Lc}odQ;l^C^Nm0U z7&%!bP@4|~-Q5N)?Sp`HkOA(?Z9D7uv;MO;Hbf^l=$!fZ7(&hC$k%r__1RKFhZpi>2qx12hG}*S;xX=hO3YqROflZEq2<~HxxswIj z*7?>!Hv)8-6zz$;d^fMlOIys*ug;!{eU07&Q=b!T6>AydpT?`@-~l7Z3Xo#H&N;IG%* zKW!4fc?iscIh!XZ;Ux%CxT#`iX*|7l66gF(|Abgc zb|UUuY+DxRIZ}XF<49Tn>ih5snVr@Kz(ZPyxW}M&Aa@x0z#GLbszKh$o6+tB-)Vqf z{mWy8sHEEalJbB+aXA4Vo=7;IC|(!!V)SJtFcnJHEv=fGG(Cd~4sXt%tQZzajWDDtKYfBp7cdHFGdTwY2ra z(s25juev}V$qJ#(J!o0bZKuuMQgz{O9FP$uSmnAo2nv(mt6*KEiRFsr8jhA2YJd13 zRJ~C~w3DjYnqZX_5H$?k$0AL!_j(;7|6E5I{m4*$N)q`lufs$=92ziIJbAs2pOQd^ zCaLvmmfNcDe^UZfw@7j@45PLlahjii(+^UHRy9~xWM@kafC?i6!Y5yD9_8VRE_(+iAHkYHLd05CmlMo?kzO+3kwyWpe#GP8iWOr!H=X zEs^ZdDI?Rg2+-ZK%fXBHgZ^%5++}Q3ZBXQO3_jD}P0;~qL!(MUoCCV8*m(iCCr^NPeE6sShL)7$E(!o(|uti>-hKGx%0Of ztExMPs_GU);RR`KtB#&^mvjUriBZ1?#4ZvZfkm_k&_zTTBs9u1<3mTZAr19g{zzHx z5v*p&-rT%8nRLW;lq5_7^Wel9a5K+_ezxc!6sG2e#fBqoR9m4LwoNdkYv^{K*2%Ug z1vg$8#W80()0i#PsnP@%A}qSqmlMhy(~$0yvx!VnU7DEXx!3cM*tgpujQSlN#UNE( zDavO*Cv;Gqnl|f7#jHkU$-1pBvw>m@lF09TJ_GzFDMEx9KC$5s19FFVq3S~HepnES zw2Kb-x#3eLij==uxF$Wimc^XSjVtFRlCQLrL14zPUDM`#si*T(hAGES_C>j2q`lCp zp;O?&5zgj>AgYNkE=@Ed=iYHTPn^LjEkz2@?rIF>R%+dYvX}`$;!$&CiiP6Dl2@Da z2eZlc0Nfs%6x~&1fh1_EX4ZT!0^~wl@^NsgYG*;xO!n!%h=cVC7snymtuXAr{fCbU zNxKZaNBXaapX|N2+#p2!gJFTd=#8n~Q^2-jE4Vx1lmK4^9lV5qzLackdpSw^q}K9a z{g~oX-FX>ZwM8no?`ASEB3$DS!%(Q-6Q9M%Y~-s8tS3w0;1B* zE7{6A7NrQ*M=2iPVdF#o&9wxB(E@hs<^(bcaM5hR4wl=5YMEde_LW5NG4lEo0Hau% z|4#jg;wU6xHZ7GF~g%u5y@wC zpifE~F410X=b;3i{4`u)ey{r}(AIhKjV|0som(eWo(KJs6n|LIx#E1jB*W-OTACW%sQU^X$cJv zB-Bw8jG^7sCQ0b$(FKqppIdj=Twi{npGS$}qyJg{B0VJtV!*oVnLk4n*c&&(9BjDB zB#99!^`~SF!#mU1*`nXTe->%NK!;ijY^Tw<4R{(~kh)UT{>xMwqQSDFDd-2uC4ouz016>x+uxup=axv@LHb@dT&Hswza z##Z{P!9$28!_V1ni0^^KXR|R0H{uuPtD2#OVa0d@u%j!G*5THzpM~H;*fjp3QY04i zwnk^z{Ar8b1sK{gN+Xz`#(jd6dcfywz&^P)Lils{rE_1A1cLaUGHi{_<2A>YLyrj| zA`(-$+#8QT1$$!E-@wLdHs%*7fb5j|!Zj2On{UK>5po_*l`kRdTi3hOY#IfN?Y`NI zUWdN~gPea3C%+-P`?^_Q8BczD>JE?!M3~N;B`c3`e?(B37XsQky>|``^c}JSohRyP zovj~blO=^qJ5dg>Yp*rq;JP4f*PxQEK^`P92Vx;#wGX;1eqT0rs>G%4^kZgNz^V5c zHWG==a?t34iQ;RN8&8gMdVHAzoRStp|KScMYDa<`R>Ns;#SRE_hx_*v^S@B;P9BLi zq1hbm>0m)jg*`ok|u_RQDH}9fFpk1oS#tu_!C(g z^uFB_6nj3JWhVEAg}SHUEK5(cqM+PkRKlU^fm){b!1HHlAg3YYx5@cMK-625ubi59 z-vqnpy&+ENsGl5AQoCn-;8tziGi`vHi3!YRVxbeRy@B25 z0qWUL-n{Jwz&t$<&d`9QHDtta52F(#j}soRAxW(UCcqrGpW12jc$BC8USkc0i3A~$ z&b9*BlDi`0a2|fbcxH^_wh`x+fLAAHINz9EVy=$1)~xX^@=-e_7i}TFAAxKFIb!*` zL|oRajp+>4NXfmCcv~zze@X2%QAh32yHYWHNRFrNj%3-i=&x`WDn!1*LIM6$Ix}x| z*xCC<1TS`Sc^D*y+=cBWA(0MhPe)PPAJx!c?$+tma5F(CDaOw0I@zP(5N=`Q%=IA( zBS09bqra`tdi8hFU^djoB4mDB@`*?`<_u+0pb!uk=HET31xAr}mz>H*j=R?z;>{H? zM*~NXw8b{sZ(&%vWOiD!=+<6-w?9D+XZ4$rsmvpn2c#|cJNM$3{Nai*c^2*x-E{GI zv!$EiFi2bFY=bFxxXZu#1vh|`MT(1vi`2bIG%o|jJT`Q>RK zIr5FCxpb;0o9sjzP^o|y4x3ABtMrb3N8%Oc&b}L*ZT{F={6YXfhzaC4c3*8Scm_-P zfBo-%2Iv$7Iq*}M?|;1SNBpv`XVKR@%>0LNfHB|mL@`$*ev~JFX45(VL-2}n0wZes zk4lOU!cqJ_kpKTBkbD%JDx!nFkO(@$P(=23!G^&c`QPaMbH1&xLl%&gOK317F~`Xz z5JLobk-8;NNMV7<7bT#q;Hr}U0_AU@L+Dfupd4zeU>QEY`}~h5wM?WSEE#OgO$w03 zL7>YDJ};2J#Fs!u%i%5_YN8a|JIk=^K!7jxJ}5Fm8@z?9eKGz5 zC#aVl0$L`J>7-`AUn`KjfznPW5oJIDDw3Trq;L*8>0bkjX5t4pd3oeAw?r#tu;At7 ztveA7XU``>oCDkrK8*nQIuZd@;8!c8QRF@zXk?f>sr6*;5o86pz3yT?FlI@$OJuQhK*_`gaWk6hdmpEG8ebmQNVP%TTdu zzK3w@0e~6D>N-LGM9<{FDWs`AFnNy$^LghwU7}xNhqdu9ulXlR02NQG^woc=PxSVM ze;)T}wldABBs2{RP(uz_(R~r>)ye7Lp0;=A246OBU0hd6pa}z@BVhwPwme3fO6I&ikv-;BXyyKEJS*D9ZiLXA-Y;n@;)?M z$^C1;K{ml=$-*Povg|7F8=q~>+K62t{F*@`5t`wvz8UyyBe|oJxLtv=qd{U4P9Xfu z&V!mab5l8Dqe1OvBQb>gj|d;fePzvKJURv%Uf(MDf>F|)tt5P^9S%;ozj-EfvAAa6 zY7O*cWHSa@UnYVRf)!svtR0inm4bTiLBt*`5h^MofxE+!FPjQch^}_Ke_yk%XP9`?@-?T6n*Iq;NaXR#On+K&a)I0FK&wYuz zeoLTYu9kUoUjf)65vVa)5-SMk*Ot~!RQ&J1FhU&#F$x)w0FRDpT=Dc=HUMoNY=b)6 z{>Ev!g@3p=3<)7$1hAYSQM6Pma={C04bhf*ukxS}l7OgGpp}M*vdWx9jY}YTN&W(` z(n>@7Ac{7pfA^LD`r_R>m$viYDh4a;(AU{d9X+o3w#CQ1Fp;Nb*Y#Ay(S|7hIro^& ziWGa+EYqqztJX=&b(-)EX5h)TYk)Pr9qwlJAZ-J5di2#sdbe!HB^MSt5X!!6q59i7 zTkc};@`~DuNA`=+p_fm&T6WFI)&+m8w5Q%9%{4wr`Rqn)!I)3T{HU-{ljQhSUZOSU zJaHyziJcq_kd7*H62m4MmvM^r0tl~DGQJLsyKteq&q7?ybuISU{*j{j|D0d(n@&ek zE*^(k#|akz>C8~>j$}-)sIIQC7ZG<}zo3sH0aVy?#UtTqLXaFzdXAbC%77BTu`fBi zeQ6&4Sp|pxFskcBj&|+d6+4UManqsETjV%W9zh~q<%<3Lpc#@=K7bH%W-M>(@aV`_C_MUY}<0jGX$_vuqHp8K}4;b;Df-h+m_*7ejr{ zlW*-eT%t-zN&w2<#47`~OMvye4_~GdPaMh65e~fG% zmB!^ZcvoYMbCT0Noi(soUyo;ySI?Ot$u3P3eDuH=scoP3&@R=Lb=oo4$c-20EkYfq zds{YFj}SQiIF;;Ups|2jDtoPg@!LUAUoz0^*fKa`&_k!X|2lmH4G=+bfeWDN!83I& zMeHaP3PeDH&$UWZ3_lCI&}abh8ajYysVVo~xMRbA%n^3s&EOL6tC^!2t@BEwK3vE% zy5#F);aM=l@1v#O?s+O_hf`<2D<-zH%TI{%WMK60GfJsJWf4&ykTnXR`}Fd#k8zZa#BB(Ya!7zA_!XKEJvUNxX+lN@g!;!q7^2 z#vmuO3B}JUHTp5c5g+fzYu2(pU*a>-k3@a$15t3G8VZf%V^LlvTB3U`bjJR>{t6-F z+_n>&SN8q{`vOA^E-!bMH?dWiAUz*H+P@{?Ue2k4&%PRJxy`4^j;&eGM>LVvT3vDP zAp26&2m5wIfRg@W%p*RE_K-%&GjI3VCi`YIRGV=cWV#>^eAp6dP#&WNU#^PjlQ$QQ z6#ZG1V6W-)&V{uTiF3=SklSIj^johZYWIw2&uiumv7>j>ky@J>{z52Hm_#5We zi8Kaj(Q&nY02e&x9!?@x$LJKJ{?tx;VtQ?UGjV^uHfr8m{hcou?6}P^*lwE! zi1DZbAPg=lVW=ZMH#eaZD&_{xY%{Zua6OSEK_1;RIkDR7a0O#Nqvs9VvTz z_SQgzB-EQ%sTuK*K>WG4r11ke!|Gh&L-Dr2xmAMNm1@NeqG{-ZsGJ=I^s>R}yiiPR z^0o!mfLl_fB%+e*3}ep*bke#2eVZ1szX9}@-Rc9-%|ln)SY3yXrQtN#lf%`SK`|ua zZ|=a4;G*5EBL^-);y4q^EeK5rV+3eSKqpbP1dkSgh%u;nD@T9%%D%jC6=c`s z3gVY5A^~6uUfM=CHp*y9l{;N)D~g%s!Q>+kqg=6~$L$Mr;12weX?{HpvyuUdNBZq! z2-=4v2Q>fM)dKSNU|9koQyzYFX<>Md*01~QCuCZzV%lUW-gLp+qFH*H2rzewEwQX0 zAdb|C{VG4*h@qFHO{MuWP%{+rlMT;h3M78Gu1!#IUwQR&w}>lXQ)<|n zf@h>&Pa*hw%KzQ^!^)?>KktSoac} z-J7qUA+KosJuhjnj{<(2ti^uv z;LvUBRd(vHod9;Z)5?`AD|21CEooql?F^lr({Q_v_6k)uO)DQdrzOEluez`FmcF8_ zvOt;3S^f9#nS7|`_I}|9n%m<})HJ3F#QW&>RvAlb7x9+wJ%)2W54A5_clX0sgX?43 zKq2V8^pjzL!EjK;zUE_AeRExrbFj+QDQ&nL)LT0J>K89r(qEz?`|MnH$GwP)w0=;> zs%;$_r~lB?*8S+ka(bemqz7&LmQe##yUC=EcP zE@L}5FXtQPk7pDP4A`3%?4tvMF%r~*G#H@adUHR+7f1|u_hvnW8Ehc+9Dxj{PyyA=?9jXwK zckeEjdz?Da4dT@CredEye~uNt+nm`qz+8C^MgNrmUhboA02r2bKMiEK4`}~@Wx<=5 z`4_!TU4-dUh;pG#4tLvjy}OZmY8}rk2n6JEl3PCN4V~bv?JOpCHZ(UEjE8mxsP9Xi za1fUrm;h?b%^OA9K->7wsauhwudiPT*x=-rKEaA3CMJ=Pfb4&&R>yu~U|*kYa}nJl z!`Z;VfG)cu9-axkR52KtEqFYnjsNSUoYHV=*)b*%Jv1=z(a`njrH&GzSopGHhfc z3tcdqpj*HO+p}l)r6EyQpV%~Dw&_m&%&Efv$1vs>C}2QjB-8@f?pq8E4L|q-5Tok* z_ZNt{iRqEAZZ5%KRvrC8zkt8u(d|6eJP+einhUHJ%sDHN0#NJzi4Xewi5l-A#g6f( zoq*x5__v`@azYFlOA#*2f$D#+Ux*8${(a6D#rV6v|Mw9K0tOBSgTCvI%D=ar4O@0M z7jnI^4}Ox2U<4TaB`XokJBe=Ct(aFHO0d#FzbpslfIiQ{|N0~h=G0|GH~Jrb<%-?e zvz22L6H(BIzFc-HXGR`U6W+&)W=8g^C@aUIE|?q3ru@9U%~+!A0@$-5@@qCQu|Yio zLbv=Up#%?8AADrQdCL4gupv6PF*dNIOa(Hgzwi<7e@&XPAlxknPv-di1qIPQTIMS(jBAGmyKqdmk$03|wmGqZStR(apv) zu6Zymn3CW>2JXtcaNd$2yZFOgV-gY)wr?);+JZXgsmes2J#~;d&l2?kbLsj`9srfA|Ms8&v~mdWAa7@N!uBtJ3B_Fn|Hp5E4A|}+eqDEuk41>#uT$qzoW2QzFo( z5ZpaHBFfA6l!|Uz?Hi%j;d~v}+Ir7A`)tIDl`B71t%#k)xXNBX3CyRZScPe&uu$vPtreq#05m*{Hh*(oO6@v| z)pXGv=ZHGTuj?poYH1>Z)6=)Xru=&b=kW$rBzFU1>Vd=gsl+GPR{B={wiNz-{e<5af;xU^nq)dZ@zZzciB3I_(vDxtNzUxtT-tVv7 zxHlsV4pp@c5^ApRRCX%zy@dR3Wu5lGh?{mG*RywhHEsGABk-SPQC;s*zZovsJS?mrZ@Kif9#iE9{_boG637&H#9VG zC&GbIZ(7GnBTqiJv~{1@yMVNaKS6TkN@YM`?i<(R{0e2$hN?<1F;!q{Qnmt^bt?!K zR&3loq&iBvQ^^q1_r_6~v<>HW!`?xwR|!n`6k6EfRLi^*iHV8glv*f%SlFCTyyfhj z9%Bbix22H0}X%Qe6^#*Miu$JPv=ERY|^6 zc)v%O``!zZ);opczPybNV2?vQ!L;{5t{^``aik^Hy11j!V9Go@ra*+52bC4f5P2O{}e%kBJsUN!D&(1#nmjUG0(R&1#K{J&bw4*sr4%k|CnE=UhdCtdtpSXlTpJ9}%((~OLdVDOBwDp==^EfDIt zB&VgPDgP)CDe+zzF$LCobn zzqurHm+;36eKMTy=3Y8cAi8$}b=`~tpWG)h2t<-2jhl^TiI83n@r2UNW-TqP5KqDb zZG0>L)_n~iT18c(fuW@IZFrmz8Y3eY&@F{orj^!0p$!b|BNB_92I6W|2-Suqb57x@ zf7;*O3nJrrmeGzK6+OO*_uVEiBd~og9~97)(jkx>tk>_s-QMb(X9;%qP{@RPPZ|Fq zW8<*4reU)ZEdtS18{8G{uyh#8u=zZuYL#xVTbGo1W=_4Uit?MSl zaYABWpp6*~(1RwYEr%+0{`G+h@;Dn9pRd-M4*S>8_-;|vC4%swOT$2aR^Ihj0i)so6>e?Q(?-B0YDFodTc^w6>~@VmmfHHyFcctGUmSSVJ7bc zbNZ<&MyKeY+xT&OEF~&L zDtB30goq-Poi%E-kYddk%;4yImB}0y{o(AyvgHS7-w6Y|DhT!~@ zz+q`~wG2QxEW0+rRUH5QpqM8{_a<{@Gi-*`!%>q|{RA!sJ(nRO zOcCT0?efo3i$;Ge5;u+!FOPfP)@L+0DT}u>ZU1o;A+?xl%Oh#+tgCj%u;zMlvI2!x zpmX!G0Led`1ola_Ni~IEH)C3Uxr{3(H!`y8N zHaExG-Z|*hbKmmo@o=&u3)BMRlj0$qjQIHYMkokuXm?{QF^+?FJKL|WBS27?2%jtn zso%CA8b+4a>C>-IVKoO8LW{sNDreoa#3Ylt2tz3bqNcZk|vkNA_(e^}Q9nOrq8M z7{VD5@*#OY8P~+2L!DT~#{B9O9BlgECBdJamyKNC1M}1Kz{i|)S%4Vi1R_+r*$I-B z4yrRkzTqM<1{5lFH=M6}9)~NxD0r8V7NQgCT&GY0Xf$3)EvOCFefEV?bb_o+Y1^8Z zIUqxfe0>XC$(;sHPqi+5)~=7P5EJ+i41|6oBd8_R z{<0tRhSD?$SuifV-%JB-LwKgq^C?&*;us%FJPMQHjAO7_Zb7Cu6@~C1#^Xau(Fn41GTle%JJ;& zwk%ikcsuCEJDhuadqvMJqaMG~OX%dJ_+Bv0kKmB7mfBq9Gct-t zdNX@!OOYlY<)1IFK2&o|`et(S^Ws~bklfkLA$ z!BJ3L6Ek0&k)E!XQ{{PGCMi3+am_co;tNS7LDM-N50r2swoW&S2>zX7wrm$fz8x*l z+E(t&SJFU`n0b;3hn{8V?At&`0#q!ARSZh~=})L*V}+u7^%%zq5$W~DGd8X0iG1FG z4ceN712#zgd2z)biO8Ab)zekvSu`b$64&&hSaDIjQ}>TTrPukPt6uqaPVVTuZ4ecW z8=dMSLLnUDl^7LtGdVqd$Jkf$e&h!se`gMmSF`}0hCSCkOrt5bx3_n=3Oo!3g;|#H zTM3s`j>Zi3K5FglA<*R+kS4ZAvMDgY;B>l9JM#b|BZK=%*6 z9U1u$7?FKbK`pqiN|qg>Pp~m2Me2s)WFGO*H-N8BKz4lhC+Bg?z)9o>?uZXb8naTS z)oycv;)LH*m0=X}1cg?enwDG^%Yp7bzV_h36BpMnibChP^vA!Ic_;*d4GsGqaK3;@ z5obWXTmYLA$%XRp`RhyD1p@h0ZDu}LvY_NqpDane zY(U!|3fbMha|Z{fOC}jN3}v(vU}1HWwS)oZ(#Pgdm>Co9+;-RpePD>V52Y-YodIe! zpT~Brwi|+y#8~O$F|^Ivi+0G7EXB2H8kKD7)@Lvu^dqVZDv;Zhjch+z3ZKM%$4{$2 z1|{Lcn>TOvmu|DbeE)i|hxnnj^(;tnzEGy&y3DrhtNJYT1iPU3S>v(WR0OFIAU!du z1M;EMP=VB_nzqBamW`f9KI*GiuPk(QEj2fGmXob1qX*ZRZbM4EgAo-5(%NDt*CZ~= z2a-_(A$_9SW;fk0-}uGeT6&8^0*OBxRUbxbMMdw!$Gt}v>@XgllA#lB`#(Q4PqcA* z>*?y+YGjkwDF*jMT1H0QOATr6w@?tCP?_GAU(+BvJ~aSBF$XX#h~WU?e+WHa+}PL{ zgwh*J#!ttu#N!P&ziVnb>PlXo0j53m5==m1-;e99^i!VWE$ZlKyA2y^?R8$XV50we zHs)gT^lB5{y<=<#Qa@H>XQqFImI2JX;k^pG&rkkI+dGHtJno{cQ()2bVcj|bh4lh? zqfE^89SFR#jYEUmo=ftgl(X|t)#O1LJYl9n!>%oQz* z>+zl;Uav3miSKx)T=A9=@pHqV-d?X*lZY@ANNw@Zd$oyyo=xSjz$xP_#Wkmq5o+1H z@c3Mv%28_VID%k?52cQX1& zY<(zdfP6LOk3W2Li);CEMuRlf+bGTZxE!MpR*&hTx@gl4*csaAJ{NQG z-#@d_?pKFULopmU_MGYXEByj)0L?~bB2Sf3I}Qevhg)AINKqpgHM!Q)HSj@+Kr7p@ zqAQe?m6;DkloPzr1Rd&VK=@h-R40k#jP_7kBLF_Wnk`eDmq;eG@7g4@mlA4 z+e>c>JTel$1gxoE(3|dsDXi{t*2RhIrQ>$>dh!Pb-H84Q+{Qk*Ex-wJN9im<{X$D; zXU6*JccQ%8R`H?U8Anw3hAcq$G&nny;QtEYR-PKEs{fmp}Z)l zSnS;mL^rHpYU^6iN%DC7!-s!l(({ZNm`^|s*>31|2Jz> z=wQgHD}4$ZOUJM|iEKq-U}|j^5;Zozhl@9!TEdpy(T zIoFzz`$nJTN2cSWR}jU3`{kK3eyrNwPWG9EsoSrY(uF6_qnDatI4ME@<_aEPOH#@H zoYno0HZnG=vNKW-imlh)_wPGL$SLHM)7AU0i_AY-VFrbgAH3*-VW(Lwc)JgUP}LPY zfjx5yU3)NYZmSLx65f>$Q-Wau4_4pV*g;dUS_H>35hk>pMs{s@%_OGYEYEXsHeu1y zQ}wA-FCBU`^{7xE3B?tQjAvQ}?9(h3EAW2kQV+J7FE-oaWu+zH*g+pI^pT+ZL#cRDY7s!IL73bd z>Aq~uySe+CC(O)>nc1#zqYlDE;avc-HtzTq$AbWMBCxb}LnGq-c>jn5U%O4kWlQ;C zs}fGi0GkpEwS_G(anFTrj_dj_@5q0rZ~pUS-JR^oNkQ0V$L<(hGcv}uKTn6fO~3+c zQmhf;F3>;n@Sie@r3{;LbHHGE1ZUd0vAAGK{TaImV*MT)s zMRU;68wLfHWfG8cc=XnRBcB&Q@B6Yq9;~ikXA?uhS{(5@v?2n_eO!lAdI`2{Fay|D zk%NQdq@8KFh+sa^An2T+5VG=BBgM3yj3>#?I$>e?_s>dN4e%#oX}l$oFM>BluKhp! zrU^xlI@tk%Q-xeb62#sQAHJ?QzSH7`_*s6V%29zzeWkwgHUv0+;lBgKv%3L4_S=b- z;{FI}N!{~69DZAMd*y7vN1c&$4n~GvtyN`jo>9>0ULc88=dtt;I+MU#(}o0U5prX; zPi!%6+`COxP0i@|@#7tnGksB#a}r4ncJp7?=O|-nKv9+kp+eN}(qbX=rL<|EsaH;S znSXAsx5IYkrc<(PfwO)Iz!Aj3o|K=}?t)s#5Ka)^(U|nHF^>rttyw?$E!ldpZeLLw z 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

7A0XTzrcohw%%iI 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%0DFxLthL8;U#)0@lV9KZr2}5+fCJ{ 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 literal 0 HcmV?d00001