osh - List of checks

Checks

IDs Name Weight Openness Hardware Quality Machine-Readability Description Why Source Code
bom_exists BoM exists 0.20 0.50 1.00 0.30 0.60 Checks that a Bill of Materials (BoM) file exists in the projects root dir,
using the regex (?i)^(BoM\|BillOfMaterials\|Bill_of_Materials\|Bill-of-Materials).*$.
A BoM file contains a list of all required parts,
be that raw parts or ready-made ones.
That not only clearly marks the repository as a hardware project,
but also allows for quick human (and partly machine/software)
based analysis for what is needed to build the piece of hardware,
and to have at east a first rought idea about the costs,
and potential candidates that could become a supply problem.

… plus probably many other uses.
bom_exists.nim
clean_cad_files Clean CAD files 1.00 1.00 1.00 0.50 1.00 Checks that the Mechanical design files -
Computer Aided Design (CAD) files -
if any,
use an open format,
are text-based
and are actual source files (vs generated).
- open format:
This is good for collaboration:
It is legal and technically easier to create viewers and editors,
and it is much more likley that there already are or will be viewers and editors
for such formats,
which are free themselfs.
- text-based:
This is good for versioning with a version control system,
e.g. git,
which makes collaborating and sharing of a design easier.
- source files:
This is required for being Open Source in the first place.
clean_cad_files.nim
clean_electronics_files Clean electronics files 1.00 1.00 1.00 0.50 1.00 Checks that the contained Electronics blueprint files -
Schematics and PCB designs -
if any,
use an open format,
are text-based
and are actual source files (vs generated).
- open format:
This is good for collaboration:
It is legal and technically easier to create viewers and editors,
and it is much more likley that there already are or will be viewers and editors
for such formats,
which are free themselfs.
- text-based:
This is good for versioning with a version control system,
e.g. git,
which makes collaborating and sharing of a design easier.
- source files:
This is required for being Open Source in the first place.
clean_electronics_files.nim
license_exists LICENSE exists 0.20 1.00 0.00 0.05 1.00 Checks that a LICENSE file exists in the projects root dir,
using the regex (?i)^.*(LICEN[SC]E\|COPYING).*$.
Note that this is related to the REUSE lint check.
Before REUSE, this was the standard (and only) way
to declare which license(s) are used within the project.
While REUSE is in all ways superior to this approach,
Many platforms and softwares still purely rely on this way
to automatically detect the license(s) of a project.
We thus recommend to keep the “main”
(according ot your subjective decission)
license of the project in such a file,
by first fixing REUSE for the project,
and then running a command similar to:
cp LICENSES/CERN-OHL-S-2.0.txt LICENSE.txt
license_exists.nim
markdown_lint Markdown content 0.50 0.90 0.00 1.00 1.00 Checks that the content of all Markdown files in the repository
adheres to a strict set of syntax rules for that format.
Markdown exists in many different varieties.
There is mostly one original format (simply: “Markdown”),
which has very loose syntax rules,
and which nobody uses anymore,
because it can be unclear what was meant to be expressed
(format wise).
Then there are all the derivatives,
which are not fully compatible amongst each other.
Examples for these are:

* CommonMark (Close)
* Github Flavored Markdown (GFM)
* GitLab Markdown (very similar to the above)
* Pandoc Markdown

CommonMark has the same, limited set of features like the original Markdown,
but is very strict with regards to what is valid and what not.
This is good, because it means, that if you adhere to this set of rules,
your Markdown will be correctly interpreted whereever Markdown is accepted

Most other Markdown flavors -
like the other three above -
have extended the original set of features,
and try to guess what the user wanted to express,
even if they did not use correct syntax.
To rely on this though, makes ones Markdown less portable,
and thus in a way, kind of inflicts a soft lock-in
on systems supporting such heuristics.
markdown_lint.nim
markup_link Markup link check 0.70 0.90 0.00 1.00 0.60 Checks whether links in Markdown and HTML documents
in the repo are pointing to something valid.
Links are often put in by project maintainers once
and then they forget about them.
Due to the dynamic nature of the web,
links become defunct over time,
which of course hurts the quality of the documentation
and the experience the users have, browsing it.

This is especially important and freuqent
in regards to repo-internal links.

This check brings the attention of this issue
back to the repo maintainers,
without having to rely on users
reporting each link individually.
markup_link.nim
no_generated_files No generated files 0.50 0.60 0.00 0.50 0.30 Checks that no generated files are part of the project.
These are usually files that are created using a software
that is manually configured and executed by a human.
Try instead, to find a way to automate this process,
and to not store the resulting files in the repository.
1. The projects storage requirements go down -
usually by a lot
2. There are no outdated generated files,
because of either of these two reasons:

- One only gets the files hwen generating them right when required, or
- They are regenerated in CI/build-bot and uploaded/hosted on the project pages
whenever there is a change (e.g. a git push to to the repo)

NOTE: This is one of the more controversial checks,
as it often requires writing new software.
That is sometimes a simple script,
and sometimes complex software requiring many person-months of development.
no_generated_files.nim
no_global_links_to_local_files No global links to local files 0.40 0.80 0.00 0.80 0.80 Checks no links to project local files use a ‘global’ prefix,
be it a web-hosting URL or an absolute local path.
This is a step towards a documentation that is:

- locally browsable an editable without internet connection
- showing and linking to the actual, local, correct content
no_global_links_to_local_files.nim
no_sources_in_root No sources in root 0.10 0.60 0.00 0.80 0.00 Checks that no source files appear in the root dir of the project.
Make sure to put them all into sub-directories, for example src/.
Makes the Repo look more clean and more friendly,
especially for non-coding people
that might just wnat to browse or edit the documentation.
no_sources_in_root.nim
no_space_in_file_names No space in file names 0.40 0.60 0.00 0.80 1.00 Checks that no file-names in the project contain white-space. This makes automatic processing of all the projects files
much easier and less error-prone.
no_space_in_file_names.nim
okh_file_exists OKH file exists 0.70 1.00 1.00 0.50 1.00 Checks that the OKH manifest file -
which contains project meta-data -
exists.
If this is actually a hardware project,
the existence of this file clearly and unmistakingly marks it as such,
both for humans and machines/software.

This is useful when dealing with a lot of projects,
to not waste life- or processing-time,
which likely would still be less exact in its findings.
okh_file_exists.nim
okh_lint OKH manifest content 0.70 1.00 0.00 1.00 1.00 Checks that the OKH manifest file -
which contains project meta-data -
contains at least the required properties,
and that all properties use the correct format.
This makes the project much more easily comparable,
both for humans and machines/software.

This is useful when dealing with a lot of projects,
to not waste life- or processing-time,
trying to figure out a certain,
commonly useful set of properties about a project.
okh_lint.nim
readme_exists README exists 0.20 1.00 0.00 0.10 0.50 Checks that a README file exists in the projects root dir,
using the regex (?i)^.*README.*$.
A README file is the main entry point for a human that comes along the project,
and wants to figure out what it is about, and how to use it.

It is targeted at all potential stakeholders of the project,
be it designers, manufacturers, sellers, repairers or users.

We might think of it as the most essential,
basic part of the documentation of the project.
readme_exists.nim
reuse_lint REUSE Licensing info 0.50 1.00 0.00 0.30 1.00 Checks that complete SPDX licensing info is given
for all files in the project.
We do this using the Free Software Foundations REUSE tool.

NOTE: This is related to the License exists check.
Copyright and licensing is difficult,
especially when reusing software from different projects
that are released under various different licenses.
REUSE was started by
the Free Software Foundation Europe (FSFE)
to provide a set of recommendations to make licensing your Free Software projects easier.
Not only do these recommendations make it easier for you
to declare the licenses under which your works are released,
but they also make it easier for a computer
to understand how your project is licensed.

Propper licensing information may prevent or help in potential legal disputes.
It also helps anyone using your source or derivates of it,
to understand their rights.
reuse_lint.nim
unwanted_files_exist_not No unwanted files 0.50 0.60 0.00 0.50 0.30 Checks that no unwanted files are part of the project.
These could be backups, caches, IDE/platform specific, and so on.
These files, present in the repo, could cause these issues and inconvieniences:

- potentially inflating the repositories size
- mess up local settings (e.g. local cache paths of an IDE) by one designer
on an other deginers machine
- make the project appear less clean
- make the project maintainers look like amateurs to seasoned Open Source people
- confuse people, as they are around, yet seem to have no usefulness
unwanted_files_exist_not.nim
uses_dir_std Uses dir standard 1.00 1.00 0.30 1.00 1.00 Checks whether the unixish OSH directory standard is used
for a sufficient amount of files and directories in the project,
using the osh-dir-std CLI tool.
1. to be able to extract meta-data:
1. easy indexing (and thus finding) of projects
2. easy comparing of projects
3. allows to write software tools that deal with project repos
2. find your way around quickly and easily in different projects
uses_dir_std.nim
vcs_public VCS public 0.70 1.00 0.00 0.60 0.00 Checks whether the Version Control System (VCS)
is publicly available, and without requiring authentication.
A public VCS (e.g. a git repo on GitHub) -
while somewhat challenging to use for some people -
currently (May 2023) is the best way to colaboratively work on Open Source projects together.

It allows to track changes in parallel,
to see who did what when and why (if use right).

Without a public VCS, the project develoment is reserved for “the elite” that is allowed access to it,
or alternatively - and maybe even worse - the development is split up and happening in parallel,
without a good way of sharing the fruits of labout of that process.
vcs_public.nim
vcs_used VCS is used 0.70 1.00 0.00 0.60 0.80 Checks whether a Version Control System (VCS)
is used to store the projects files, e.g. git, mercurial or pijul.

## What is a VCS

Version control is a system that maintains a history of changes.
What is packaged into a single, specific change,
(aka commit or patch),
is decided by the people that make the changes.
These changes should be small
and they should form logical units that make sense as a whole,
to the point where it makes no sense to divide them further.
A change might edit any number of files, delete some, and add others.
In the VCS, each change comes complete with a summary,
optional extensive description of the changes,
author info, timestamp and other details.
Thus, the VCS can tell you who changed what, when and why,
and it allows you to go back in time,
or create a new mix of changes:
an alternative history.
A specific change may also be marked as a version,
like ‘2.0’ or ‘1.5.3-alpha’.

## What is it good for

To share the product documentation on versioning systems
is the most efficient, quality-rich way
to work in parallel within a distributed community.

Having the complete history
enables going back to previous versions
to help in root cause analysis for bugs
and it is crucial when needing to fix problems in older versions.

It allows also to connect reported bugs and project management software
to the relevant change(s),
which allows to see whether a particular version
contains a specific fix of a bug or feature.

Textual documentation can be edited online.
vcs_used.nim