blob: 84e99ef828a896f99bbe9451ff82de265de715eb [file] [view] [edit]
<!-- mdformat off(templates not supported) -->
{% set rfcid = "RFC-0125" %}
{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %}
# {{ rfc.name }}: {{ rfc.title }}
<!-- SET the `rfcid` VAR ABOVE. DO NOT EDIT ANYTHING ELSE ABOVE THIS LINE. -->
<!-- mdformat on -->
## Summary
Allow the use of shorter, meaningful, and durable links to specific Fuchsia
artifacts. These shortlinks ensure links won't degrade over time.
The proposed format is fuchsia.dev/go/<keyword> and would map to any
fuchsia.dev document or a specific file in the Fuchsia source tree.
For example, fuchsia.dev/go/components could redirect to a page
such as fuchsia.dev/fuchsia-src/concepts/components/v2.
In most cases, these links should not be changed; however, there may be
exceptions, such as when the Component framework version change. The
go/link allows for a seamless transition between these version changes.
## Motivation
Shorter links are useful for things such as rubrics, specifications,
documentation, FAQs, supported hardware, and more. They are also helpful
with version updated, for example, Components v2.
This can also help with versioning of certain core parts of Fuchsia such
as Components.
## Stakeholders
Facilitator: hjfreyer.
Reviewers: mkearney, curtisgalloway.
Consulted: Members of FEC.
Socialization: RFC draft was shared with the technical writing team.
## Design
The design involves creating a directory in the source tree in `docs/go/`
to place a `_redirects.yaml` file.
This directory will include a `README.md` file to explain how to use the
redirects. It will also have an `OWNERS` file to review and approve the new
shortlinks. The `OWNERS` would also need to approve any possible changes to
existing `go` links. These changes should only be approved in very particular
cases, such as a replacement of a core concept, such as a new version of the
component framemwork.
The format of redirects would be in the following format:
```
- from: /docs/go/<keyword>
to: <path in source tree>
```
Example:
Note: This syntax can also point to source files outside of the `docs/`
directory.
```
- from: /docs/go/drivers
to: /docs/reference/hardware/drivers.md
```
This redirect results in <docs/go/drivers> and points to
<docs/reference/hardware/drivers>.
## Implementation
Create three changes:
* A gerrit change that includes the new `docs/go` directory along with
`_redirects.yaml`, `README.md`, and `OWNERS` files.
* A gerrit change that updates `doc_checker` for testing. See
[Testing](#Testing).
* An overall redirect for fuchsia.dev to redirect fuchsia.dev/fuchsia-src/go/
to fuchsia.dev/go. fuchsia/src/go/ would be the path for `docs/go` on
fuchsia.dev.
## Performance
Note: Only applies to fuchsia.dev.
This would result in a minor latency increase due to the redirect.
## Ergonomics
This enables contributors to make easy to remember keywords for Fuchsia
documentation.
## Backwards Compatibility
N/A.
## Security considerations
Technically, a `_redirects.yaml` file can be added in any of the
sub-directories of the `/docs/` directory to make redirects. However, the scope
of a `_redirects.yaml` file is limited to the directory in which the file
lives; there should not be an issue where other parts of fuchsia.dev get
redirected.
This proposal creates a `/docs/go/_redirects.yaml` file which limits the
redirect scope to only fuchsia.dev/go/. In the background, a higher-level
redirect takes care of redirecting fuchsia.dev/fuchsia-src/go to
fuchsia.dev/go. Keep in mind that once the git repo is moved into fuchsia.dev,
the `fuchsia-src/` directory is mapped to the `docs/` directory.
## Privacy considerations
N/A.
## Testing
[`doc_checker`](https://cs.opensource.google/fuchsia/fuchsia/+/main:tools/doc_checker/)
can be expanded to verify that:
* The `- from:` fields only have `/docs/go` paths to avoid issues.
* The `to:` links exist.
* The other .md files in `/docs/` are not referencing broken `/docs/go/` links.
* Problematic words or phrases are not used in the names of links.
* No duplicate `go` keywords exist.
## Documentation
Create a `README.md` that explains the syntax for the file along with the
following items:
* Rubric for making a shortlink. See [rubric](#rubric) For example, things
that should have a permanent reference in case of a reorganization. Any
reviewer could consult this rubric to determine the validity of proposed
links.
### Rubric {#rubric}
Short links (fuchsia.dev/go) are intended to be durable, have a meaningful
name, and be of general interest. The links are durable and use a
flat namespace, so it is desirable to carefully consider each proposal
to limit the number of created short links.
Reviewers should consider the following factors to approve pending short
link requests:
* Will the proposed link be relevant for a long time?
Links are intended to be durable, so you should be reasonably confident
that a link will continue to be of general interest for a long time.
* <span class="compare-better">Positive example</span>:
A general Fuchsia FAQ page or the current list of supported hardware. Even
though they will change over time, the topics will be relevant
indefinitely.
* <span class="compare-worse">Negative example</span>:
An RFC proposal that is under consideration. While the proposal is
currently relevant, it will be either accepted or rejected. If accepted,
it may be a suitable short link topic for reference.
* Does the link cover a general topic or concept? Is it relevant for a wide
audience?
* <span class="compare-better">Positive example</span>:
* An overview of FIDL. This is a fundamental technology used by Fuchsia.
* The Fuchsia security model. This is of interest to both users and
developers.
* <span class="compare-worse">Negative example</span>:
* Documentation for a single system call. A link to the list of system
calls would be more relevant.
* Instructions for booting a specific model of NUC over Ethernet. A link
to a more general page on booting Fuchsia on categories of devices
would be of interest to a wider audience.
* Does the link duplicate an existing easy-to-use link that is unlikely to
change?
* <span class="compare-better">Positive example</span>:
<fuchsia.dev/fuchsia-src/get-started> is unlikely to change, so
<fuchsia.dev/go/get-started> is probably redundant.
* Is the link name meaningful, and does it comply with the
[Respectful Code policy](/docs/contribute/respectful_code.md)?
Short links should be, of course, short, but not at the expense of being
understood.
* <span class="compare-better">Positive example</span>:
Both of these examples are short and descriptive:
* `/docs/go/faq` (renders as fuchsia.dev/go/faq).
* `/docs/go/hardware-specs` (renders as fuchsia.dev/go/hardware-specs).
* Does the `to` link point to a document inside of the `/docs/` directory?
* <span class="compare-better">Positive example</span>:
* `to: /docs/concepts/software_model.md`.
* <span class="compare-worse">Negative example</span>:
* `to: http://google.com/`.
## Drawbacks, alternatives, and unknowns
N/A
## Prior art and references
Examples from link shortners such as:
* [http://bit.ly/](http://bit.ly/){: .external}