Make the Carbon experiment public
Pull request
Table of contents
Problem
Open, transparent, and public development is often the best way to build a
developer community. Long-term evolution of Carbon behind closed doors does not
align with our core principles.
While early exploration with a limited group of participants has been effective
at bootstrapping, a primary goal for the Carbon experiment is to establish
whether there will be broad industry interest and participation in this
direction. We expect this kind of interest and participation to ultimately
result in widespread adoption if the technical components of the experiment
succeed. We both want to see how the industry reacts to Carbon and think that
reaction will be much more positive if the industry can actively participate and
help shape the language.
Background
Historically, Carbon has followed a "quiet" development model. While developed
on GitHub using an open source process, the project was not publicly visible or
discussed outside the invited set of early participants.
Carbon developed an initial set of criteria that we expected to signal the
correct time for the project to become public:
- Broader field experience required
- Sustained interest from multiple organizations and individuals
- A prototype implementation
- A demonstration of potential
- Learning material
- Prepared for broader contributions and feedback
- Prepared for a launch event
See the removed going_public.md document in this
proposal for the
full historical criteria and analysis.
Proposal
We should make the Carbon experiment public as soon as reasonably possible,
specifically at the upcoming C++ North conference.
Many of the criteria outlined previously have not yet been met, and this
proposal specifically suggests shifting Carbon to be public without waiting for
them. Instead, we should make Carbon public largely as it is today. We should be
open and transparent about the current status. We should frame this as making a
nascent project public in order to build it in the open, rather than
suggesting it is "done" or "ready" even for evaluation.
Why go public now?
There is no perfect time to shift the project public, it is a tradeoff. The
earlier we move the project to be public, the earlier we can gain more broad
feedback and participation from the industry. However, it comes at the cost of
introducing people to the project at an earlier stage with less material to help
them get started. We believe Carbon has crossed the point where this tradeoff
suggests sooner would be overall better for the project than later.
The Carbon experiment has accomplished what it can to explore industry
interest and participation with limited and targeted outreach to experts. We
have built the critical community and design process and framework to support an
open technical discussion. We have also developed the key language design ideas
sufficiently to show what Carbon would look like clearly and unambiguously. To
broaden or deepen the feedback, we will need frank and public discussion with
wider groups of users and stakeholders. We will need to iterate with a larger
community and a broader set of stakeholders.
The needs of the C++ community remain unmet, and they are eager and asking
for exactly Carbon's approach. The technical approach of Carbon directly
addresses concrete and current requests from influential C++ developers. These
needs are specifically not met by C or C++ as they exist or by Rust or other
options, and we have a strategic opportunity to help drive a solution in this
space.
A recent example on Twitter:
Speaking as a C/C++ developer, when I write in C/C++, I am doing so due to
ecosystem/practical/legacy code constraints I have no control over, which
means that being given a superior choice makes no difference to me because I
didn't get a chance to choose C/C++ to start with
-- @mcclure111
A recent HackerNews discussion directly suggested essentially the direction we
are exploring:
The permanent-ABI compatibility decision was effectively the death-knell for
C++. Can't improve the standard library performance, making it effectively
useless for the real world. Can't correct mistakes - the language and library
warts grow and grow as the years pass by, making it impossible for beginners
to pick up and learn the language.
-- lenkite
Last but not least, the Carbon experiment will accelerate thinking about more
dramatic ways to improve C++ across the industry.
Planned process for going public
Our planned process is anchored around a few key principles:
- Replicate LLVM's open-source approach and strategy. This has proven broadly
successful over many years.
- Use existing events and spaces where possible to engage with the C++
community and industry.
- Emphasize that it's an experiment, not a finished product.
- Leverage existing C++ ecosystems rather than creating new ecosystems from
scratch.
We expect three phases to move things to be public:
- Get technical components ready: demo, documentation, etc.
- Do an incremental "road show" with experts, organizations, and WG21 in weeks
leading up to an official public announcement to seed early awareness.
- Announce and make everything public at C++North.
During the second phase, we plan to engage with the following individuals and
groups:
- Industry partners already active in C++ evolution.
- Influential experts, especially those actively driving C++ evolution and
prominently writing blog posts or speaking on C++.
- Community organizations like #include and Boost.
Our intent is to invite large portions of these groups to join community spaces
to help engage and establish the community culture.
The third phase will be oriented around a keynote at CppNorth:
- Introduce the audience to the motivation for Carbon and its goals.
- Explain the project, community, and process.
- Walk through the core language design so far, and touch on exciting future
efforts.
- Provide an extended Q&A to help kick off active discussions, ideally with as
many of the current Carbon contributors on stage as possible.
- Will open the GitHub project read ACLs either right before or during the
talk so that the audience can explore during the Q&A and afterward.
- Will open the contribution ACLs and Discord Chat at the end so that the
maximum team bandwidth is available to engage with folks as they begin
discussing.
Public site and communications plan
- Planning to use a GitHub project and GitHub hosted markdown documentation.
- Work with existing C++ community blogs to post information about the project
after announcement.
We are specifically not planning on a website, blog, or other more "official"
presence. This should anchor on Carbon being an experiment and attracting
contributors and participants rather than users.
Plan for ACLs once public
GitHub will move to the normal for a public repository:
- Anyone can create PRs, issues, discussions. This will be fully public.
- A fairly small number of committers (initially the current set) can merge
PRs.
Discord will be fully public, using the community features to gate entry on CoC
and CLA.
The shared Google drive and docs:
- Make viewable publicly.
- Use the existing group (carbon-lang-contributors@googlegroups.com) to
provide comment and edit access.
- New contributors will need to request to join the group to begin
contributing in this space, but only to avoid spam. This will be a very
low-risk and trivially handed out access.
Meetings and calendar:
- As currently, the meeting links would be posted to Discord and anyone there
can click through and join.
- The shared calendar and weekly meeting can also be directly made available
to the same group as the drive.
- In the future, we can explore enabling live-streaming from the weekly
meeting and providing a fully public live stream link for those interested.
Risks and mitigations
Making Carbon public does raise some significant risks that we need to be aware
of and work to mitigate.
Too many cooks in the kitchen
- While opening up to the public, we may get a huge influx of feedback and
even contributions.
- This can quickly turn into a situation of too many folks all trying to drive
Carbon forward in their own direction.
Planned mitigations:
- We're hoping that many of the critical parts of the language design we've
prioritized have enough maturity to show a reasonably focused direction that
folks should focus on to be useful.
- We will likely work to avoid immediately reconsidering directions that
are already well under way to stay focused, capturing any feedback and
marking it as deferred for a time to revisit.
- Critical aspects of the language design that are still green fields, we're
hoping to clearly document as being intentionally deferred in part just to
reduce the level of churn.
- However, we can and should carefully watch for sustained contributors
who are looking for an area to drive. That needs to be identified and
enabled. We just want to make sure it can be a focused effort.
- We should make an extra effort to use the more formal process of raising
questions for the Carbon Leads to direct the incoming flow. That process is
set up in a way that should enable it to queue and process things without
ending up in total chaos.
- Where possible, teams working on Carbon should start making contingency
plans to pull in more resources if needed to sustain the engagement.
Community management overload
- We may have a sudden influx of community members, with all of them trying to
figure out how to collaborate and communicate effectively. This may even
include publicity and other factors.
- Responding to and engaging with this will be both time consuming, and
difficult.
- It will be tempting for the Carbon Leads to attempt to drive these
responses, in turn starving other parts of the project.
Planned mitigations:
- Provide early access to a growing set of people, especially those interested
and effective and helping with community and communication.
- Contract with a dedicated community engagement specialist.
- Work with them to recruit moderation teams and other scalable groups to
tackle these issues.
- Leverage moderation scaling tools across our communication platforms to keep
the technical work focused and moving.
Added distraction or confusion to the C++ evolution process
- Carbon is a very different direction from the continued C++ evolution in
WG21.
- Bringing the C++ community into Carbon and getting them engaged and
participating will at least reduce the available resources for WG21 in the
C++ community.
- The existence, and especially any excitement around such a different
approach may distract from important work that still needs to get done in
WG21.
Planned mitigations:
- Carbon's documentation and all of our public communication should include a
key message: If C++ fully meets your needs today, you should keep using
it. Carbon is only exploring a direction to address specific concerns
and problems some users have with C++ today. For other users whose needs are
fully met, they should stay focused on the thing that exists and works
today: C++.
- Carbon is building on top of the C++ ecosystem, and we need to be very clear
that means it is important to not distract from critical work that needs to
happen there. We should be active and vocal in supporting folks who are
continuing to drive WG21 forward.
- We need to be extremely explicit and clear at every stage that Carbon is
still an experiment that may not work out.
- We do not want critical work that needs to happen for C++ and WG21 to
stay healthy to be diverted towards Carbon.
- We plan to engage with committee members actively so they can learn as much
as possible from the Carbon experiment and incorporate any and all of our
ideas into C++ where they see a path to do so.
Added distractions from existing new programming languages.
- Another programming language in the world might dilute some of the efforts
going towards new and exciting but existing languages, especially ones with
similar performance goals such as Rust.
- It may also distract users who are unsure of which language to use.
Planned mitigations:
- Throughout Carbon's documentation and any public communication, we will take
a specific stance to avoid and minimize this effect:
- If you can use an existing language like Go, Kotlin, or Rust, do so.
This experiment is exploring an option for when existing languages
don't work, particularly due to needing to interoperate with a large
body of C++ code.
- We should be careful in the tone whenever discussing existing languages or
comparing with them, to approach them positively. We should be actively
supporting other languages, and our focus should be trying to fill a gap
in that ecosystem rather than directly competing.
Friction with existing LLVM and Clang communities
While somewhat unlikely, we don't want to create unnecessary friction with the
LLVM and especially the Clang community, as they have heavily invested in a C++
compiler and tooling stack and supporting the C++ language.
Planned mitigations:
- Need to carefully emphasize that we are build on top of the tremendous work
done by the LLVM and Clang communities.
- LLVM is a critical part of our ability to make a high-performance
implementation and have no performance overhead when interoperating with
C++ by using a shared compilation environment.
- Clang is the key to our C++ interoperability implementation plans --
without a production quality frontend with broad cross-platform support
it would be impossible to achieve the level of interop we need between
C++ and Carbon.
- Many of the insights that have led to Carbon's design come from
experimentation with Clang and C++ extensions, as well as our experience
working on the LLVM and Clang codebases themselves.
- We will clearly and publicly drive improvements to LLVM and Clang upstream
when needed for Carbon rather than carrying local patches for long
durations.
- We will also actively engage members of the LLVM community in the Carbon
experiment and ensure they are able to participate where interested.
- Lastly, all Carbon code uses the same license as LLVM so that any of it can
be immediately merged into LLVM if useful to the broader project or
community.
Labeled as vaporware
- We are intentionally moving public while Carbon is still very nascent.
- Many parts of the language still need to be built.
- We are front-loading design work heavily, which means we have designed
significantly more than is implemented.
Planned mitigations:
- Our communication around Carbon will be focused around building the Carbon
experiment to emphasize both that it is not yet even a complete
experiment, and that our goal is to get help shaping it rather than suggest
it is ready for evaluation.
- We also plan to have clear roadmaps and other artifacts that help give a
realistic and credible story around the path from where Carbon is to being a
more complete experiment.
Rationale
- Community and culture
- Becoming a fully open project has always been a goal for the project.
- Moving public will substantially broaden the feedback we get,
strengthening our community and directly furthering our goal of being an
welcoming and inclusive community.
- Interoperability with and migration from existing C++ code
- We need to ensure we can actively engage with users of different C++
codebases to effectively build a compelling interoperability and
migration story. This kind of broad engagement is only possible with a
public project.
Alternatives considered
Delay going public until we have working interop demonstrated
An appealing time to go public would be when we have a toolchain that implements
the core language design and provides a demonstration of the banner feature of
Carbon -- C++ interop -- working effectively. If we made this our top priority,
we expect we could complete this in the order of a year.
Advantages:
- Make the project much more "real" when people first learn of it, and avoid
the perception of it being vaporware.
- Avoids spending significant time and effort engaging with a large community
and industry when the project is new and small. That effort could be
directed at furthering the design and implementation.
Disadvantages:
- It would be difficult or impossible to expand the group working on Carbon
significantly, which will at some point limit the rate at which we can
execute on the project.
- We would be have significantly less broad input on the design of Carbon
itself and especially of its C++ interop, risking that the design would not
actually address the needs of the broader industry.
- We wouldn't be able to build Carbon in the open and develop trust of the
community and industry.
- We wouldn't be able to involve the broader community and industry in the
design and development of Carbon, which might lessen both interest and
enthusiasm.
- We won't start to understand how broadly the industry is interested in the
Carbon direction until significantly more effort has been invested.
The desire to build Carbon in the open, develop strong trust with the community,
and understand the breadth of industry interest outweigh the costs and risks of
making Carbon public earlier.
Delay going public until Carbon is a compelling option for C++ developers to adopt
We could delay still further and build Carbon into a compelling and ready-to-use
programming language before going public.
Advantages:
- This would in some ways be the most efficient strategy, as it would keep
everyone working on Carbon focused without distraction.
- We would have the best possible first impression on developers by having a
largely complete and high quality language ready to go.
Disadvantages:
- We still wouldn't know whether the experiment was a success -- both
developers and the industry at large might not be interested in Carbon. The
result is that this would have the maximum sunk cost at the point where we
begin to learn about the industry interest.
- It is unlikely we could sustain the effort required to reach this point
without any incremental milestones.
- We would likely have very little trust from the community due the prolonged
secrecy.
- Given the timeline, it is very likely that Carbon would leak and lose some
of the advantages.
- This would maximize the risk of some aspect of Carbon being designed in a
way that doesn't meet the larger industry needs due to a lack of feedback.
It also maximizes the cost of correcting this once discovered.
This has never been seen as a realistic approach for Carbon, and that doesn't
seem to have changed. While it does have some advantages, the tradeoff seems
sharply wrong for the needs of the Carbon project.