Community Guidelines

The Swift.org community has the singular goal of making the world’s best general purpose programming language. Collectively we will develop the language in the open, with contributions from anyone who wishes to participate. This guideline document describes how the Swift community is organized so that we can work together to add amazing new capabilities to Swift, and make it available to even more developers across more platforms.

Communication

The Swift language is developed in the open, and all technical or administrative topics about the language or community processes should be directed to the correct public mailing list. Public conversations are encouraged, and active developers of the Swift language should monitor the relevant mailing lists.

Community Structure

Advancing the Swift programming language with a coherent, clear view of its evolution requires strong leadership. The leadership is taken from the community, and works closely with the much broader group of contributors and users. Roles within the community include:

There is also a code of conduct working group to help in matters of community, culture, and the code of conduct. Most importantly, everyone that uses Swift is a valued member of our extended community.

Project Lead

Apple Inc. is the project lead and serves as the arbiter for the project. The project lead makes senior appointments to leadership roles, with those leaders coming from the worldwide Swift community of contributors. The community leaders and code contributors work together to continually improve Swift, and the language will advance by the good works of everyone involved.

Ted Kremenek (kremenek@apple.com) is the appointed representative from Apple, and acts as the voice of the project lead.

Core Team

The Core Team reviews and helps iterate on language evolution proposals from the community at large, acting as the approver of these proposals. Team members help drive Swift forward in a coherent direction consistent with the goal of creating the best possible general purpose programming language.

Members of the core team are appointed by the project lead based on their technical expertise and proven contribution to the community. The current core team members are:

At project launch, the team is composed of Apple employees due to Swift’s origin within Apple. Over time, exceptional community members from a much more diverse background will be appointed based on their record of community involvement and contributions.

Code Owners

Code owners are individuals assigned to specific areas of the Swift project, with code quality their primary responsibility. The umbrella Swift project is composed of numerous sub-projects including the Swift standard library, extensions to the LLDB debugger, and the Swift package manager, to name a few. Each sub-project will be assigned a code owner. The code owner then works to get all contributions reviewed, gather feedback from the community, and shepherd approved patches into the product.

Anyone can review a piece of code, and we welcome code review from everyone that is interested. Code review procedures are not dictated by a central, global policy. Instead, the process is defined by each code owner.

Any community member that is active and shows themselves to be valuable can offer to become a code owner via public email to the mailing list, or be nominated by another member. If fellow contributors agree, the project lead will make the appointment and add the new owner’s name to the code owners file. The position is completely voluntary, and can be resigned at any time.

The list of current code owners can be found in the file CODE_OWNERS.txt in the root of the parent Swift source tree. We also maintain a mailing group so you can send an email to all the code owners.

There may be nothing more important to the success of Swift than strong, engaged code owners. We all owe them respect, gratitude, and whatever help we can offer.

License

The Swift license is based on the Apache 2.0 license with a Runtime Library Exception that removes the attribution requirement when using Swift to build and distribute your own binaries. The Apache 2.0 license was chosen because it allows broad use of Swift, and is already well-understood by many potential contributors.

Copyright is held by the authors of the contributions, or the company or organization to which the individual belongs. A list of copyright holders is maintained in the CONTRIBUTORS.txt file on Swift.org and at the root of the repository.

Runtime Library Exception

The Runtime Library Exception makes it clear that end users of the Swift compiler don’t have to attribute their use of Swift in their finished binary application, game, or service. End-users of the Swift language should feel unrestricted to create great software. The full text of this exception follows:

As an exception, if you use this Software to compile your source code and
portions of this Software are embedded into the binary product as a result,
you may redistribute such product without providing attribution as would
otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.

This exception can also be found at the bottom of the LICENSE.txt file.

All source files hosted on Swift.org must contain a comment block at the top of the file declaring the license and copyright that applies. This text may be part of a larger header, for instance as defined in the Contributing Code section. Regardless of the header format, the wording for the license and copyright portion must be copied as follows, with the appropriate years applied:

// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

Each contributor is responsible for adding his or her name to the CONTRIBUTORS.txt file at the project’s root and maintaining the contact information. If you are contributing under the umbrella of your company, please add your company’s information, and do not also list yourself as an additional copyright holder.

Contributing

The Swift.org site welcomes everyone interested in the Swift programming language. Members of the community can greatly help the Swift project by filing and screening bugs, aiding in code review, participating in open conversations, and of course by contributing code.

Getting Started

It is highly recommended that you become familiar with using Swift in your own projects before contributing directly to the language itself. We put together handy Getting Started guides with step-by-step instructions to get you up and running.

Contributing Code

Swift.org exists primarily to welcome contributions from the community. In the simplest cases, one-off patches are welcome from everyone. However, regular contributors are expected to adopt processes that help create a culture of quality within the project.

We ask that contributors first read through the content in the Contributing section of this site. This content includes detailed instructions on the process to follow when contributing a patch, including creating a pull request to get your code into the main Swift code base.

Bugs for the various Swift projects are managed in a public bug tracking system at bugs.swift.org. Anyone can file bugs, or view them to find where they can help, or to see if a bug they found is already filed.

Proposing New Features

New features or directions for the Swift language can come from anyone with a good idea. Open discussion and iteration over the ideas in a public forum is essential to reaching the best possible solutions. Each Swift version should be clearly defined, resulting in “One True Swift” that is source compatible for that release across all supported platforms.

To support this process, Swift.org details the Swift Evolution Process, with links to the high level goals for the current release. Patches that aid in these goals will be given priority, and are more likely to get the immediate attention of code review.

Code of Conduct

To be a truly great community, Swift.org needs to welcome developers from all walks of life, with different backgrounds, and with a wide range of experience. A diverse and friendly community will have more great ideas, more unique perspectives, and produce more great code. We will work diligently to make the Swift community welcoming to everyone.

To give clarity of what is expected of our members, Swift.org has adopted the code of conduct defined by contributor-covenant.org. This document is used across many open source communities, and we think it articulates our values well. The full text is copied below:

Contributor Code of Conduct v1.3

As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

Examples of unacceptable behavior by participants include:

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.

This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer at conduct@swift.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.

This policy is adapted from the Contributor Code of Conduct version 1.3.0.

Reporting

A working group of community members is committed to promptly addressing any reported issues. Working group members are volunteers appointed by the project lead, with a preference for individuals with varied backgrounds and perspectives. Membership is expected to change regularly, and may grow or shrink.

Note: We will update this section with the names of our working group members in the coming days.

We ask that you report concerns by sending an email to the working group rather than to any individual member. If you would like to volunteer to participate in the working group, please contact the working group.

Mailing Lists

The primary method of communicating among community members is through mailing lists. As you can see below, we have a number of lists, each serving a specific purpose, and with different volumes of traffic.

For newcomers or those primarily interested in using the Swift language, it is best to start by engaging with the General Interest lists. The majority of the other lists are focused on the day-to-day of updating the language itself.

General Interest

swift-users - For users to get help with or ask questions about Swift or its related tools. This list is not for discussion about work being done to the language itself.

Swift Development

swift-dev - For developers to discuss the implementation of the Swift compiler, low-level runtime, standard library, and SourceKit.

swift-corelibs-dev - For developers to discuss the implementation of the Swift core libraries.

swift-server-dev - For developers to discuss the implementation of new server focused capabilities developed by the Server APIs work group.

swift-lldb-dev - For developers to discuss the implementation of the Swift REPL and Swift-specific aspects of LLDB.

swift-build-dev - For developers to discuss the implementation of the Swift package manager and low level build system (llbuild).

Swift Evolution

swift-evolution-announce - For announcements of Swift evolution proposal reviews and results. This is a low-volume read-only list; the actual discussion of evolution proposals occurs on the swift-evolution mailing list.

swift-evolution - For discussion of the evolution of Swift, including new language features, new standard library APIs, and so on. This is an open forum in which ideas are developed and reviewed; please see the Swift evolution repository to learn about Swift’s evolution process and which proposals are actively being discussed.

Notifications

These notification lists contain auto-generated content. Actual discussions of commits should occur on GitHub or the corresponding development mailing lists.

swift-commits - Contains all commit messages that are made when developers commit code changes to the Swift compiler, low-level runtime, standard library, or SourceKit, including Swift’s branches of LLVM and Clang. It is useful for those who want to stay on the bleeding edge of Swift language development. This list is very high volume.

swift-lldb-commits - Contains all commit messages that are made when developers commit code changes to the Swift LLDB. It is useful for those who want to stay on the bleeding edge of Swift LLDB language development. This list is very high volume.

swift-corelibs-commits - Contains all commit messages that are made when developers commit code changes to the Swift core libraries.

swift-build-commits - Contains all commit messages that are made when developers commit code changes to the Swift package manager or the low level build system (llbuild).