# Fuchsia Governance

Fuchsia is an open source project with the goal of creating a production-grade
operating system that is simple, secure, updatable, and performant.
Learn more about [Fuchsia’s core principles](/docs/concepts/index.md).

Google steers the direction of Fuchsia and makes platform decisions related to
Fuchsia. While Googlers contribute substantially to Fuchsia’s code base, the
Fuchsia project encourages contributions from anyone, not just from Googlers.

## Become a contributor

Fuchsia lets anyone contribute to the project, regardless of their employer.
The Fuchsia project reviews and encourages well-tested, high-quality
contributions from anyone who wants to contribute to Fuchsia.

To help facilitate code reviews, Fuchsia has the following contribution
guidelines and community resources:

  * [Contribute changes](/docs/development/source_code/contribute_changes.md)
  * [Fuchsia Code of Conduct](/CODE_OF_CONDUCT.md)
  * [Fuchsia contributor roles](/docs/contribute/community/contributor-roles.md)

Contributions to Fuchsia must be accompanied by a Google Contributor License
Agreement. For more information on the Contributor License
Agreement, see [Contributing to Fuchsia](/CONTRIBUTING.md#contributor_license_agreement).

## Meet the Fuchsia Eng Council

The [Fuchsia Eng Council](/docs/contribute/governance/eng_council.md)
is a small group of senior technical leaders responsible for providing a
coherent technical vision for Fuchsia. Members of the
Fuchsia Eng Council are listed in the [Fuchsia Eng Council Charter](/docs/contribute/governance/eng_council.md#current_members).

The Eng Council is responsible for maintaining the platform roadmap and approving
or rejecting Fuchsia Requests for Comments (RFCs) using the [Fuchsia RFC Process](/docs/contribute/governance/rfcs/README.md).

The Fuchsia RFC process is intended to provide a consistent and transparent
path for making project-wide, technical decisions. For example, the RFC process
can be used to evolve the project roadmap and the system architecture.

## Review the Fuchsia Open Source Licensing Policies

Fuchsia is subject to multiple licenses, for more information,
see [Fuchsia Open Source Licensing Policies](/docs/contribute/governance/policy/open-source-licensing-policies.md).
