Skip to content

Commit

Permalink
License/Docs: implement 0MQ 22/C4.1 + revise docs.
Browse files Browse the repository at this point in the history
- Move contents of CONTRIBUTING.md into STYLE.md
- Move 0MQ 22/C4.1 into CONTRIBUTING.md
- Move appropriate documentation into ./doc
- Update/revise links and other items in documentation
  • Loading branch information
anonimal committed Feb 17, 2016
1 parent 5dc950f commit 51dcb23
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 26 deletions.
16 changes: 9 additions & 7 deletions README.md
@@ -1,7 +1,7 @@
# **ˈKɔːvrɪ**

1. To cover, veil, wrap *[(Esperanto)](https://en.wikipedia.org/wiki/Esperanto)*
2. The secure, private, untraceable C++ [I2P router](https://geti2p.net), forked from [i2pd](https://github.com/PurpleI2P/i2pd/tree/master).
2. The secure, private, untraceable C++ router implementation of the [I2P](https://geti2p.net) anonymous network,

[![Build Status](https://travis-ci.org/monero-project/kovri.svg?branch=master)](https://travis-ci.org/monero-project/kovri)
[![Documentation](https://codedocs.xyz/monero-project/kovri.svg)](https://codedocs.xyz/monero-project/kovri/)
Expand All @@ -16,13 +16,14 @@
2. Open port ```12345``` in your NAT/Firewall to allow incoming TCP/UDP connections.
3. Clone, build, and run Kovri with one line:
```bash
$ git clone https://github.com/monero-project/kovri && cd kovri/build && cmake ../ && make && ./kovri --port 12345
$ git clone https://github.com/monero-project/kovri && cd kovri/build && cmake ../ && make && ./kovri -p 12345
```

## Build. Contribute. Ask questions!
- See [BUILDING.md](https://github.com/monero-project/kovri/blob/master/BUILDING.md) for more options and instructions for your favourite OS.
- See [CONTRIBUTING.md](https://github.com/monero-project/kovri/blob/master/CONTRIBUTING.md) and send us a PR. All developers welcome!
- See [FAQ.md](https://github.com/monero-project/kovri/blob/master/FAQ.md) or join us in ```#kovri``` or ```#kovri-dev``` on Irc2P or Freenode.
- See [BUILDING.md](https://github.com/monero-project/kovri/blob/master/doc/BUILDING.md) for more options and instructions for your favourite OS.
- See [CONTRIBUTING.md](https://github.com/monero-project/kovri/blob/master/doc/CONTRIBUTING.md) and send us a PR. All developers welcome!
- See [FAQ.md](https://github.com/monero-project/kovri/blob/master/doc/FAQ.md) or join us in ```#kovri``` or ```#kovri-dev``` on Irc2P or Freenode.
- All documentation is on our ./doc directory

## Vulnerability Response
- Please, submit a report via [HackerOne](https://hackerone.com/kovri)
Expand All @@ -34,6 +35,7 @@ PGP fingerprint: 1218 6272 CD48 E253 9E2D D29B 66A7 6ECF 9144 09F1
Note: our future VRP will be inline with [I2P's VRP](https://trac.i2p2.de/ticket/1119).

## Acknowledgments
- **orion** and **EinMByte** for providing the [first](http://git.repo.i2p.xyz/w/i2pcpp.git) C++ implementation of I2P.
- **orignal** and **EinMByte** for providing a [mostly-working](https://github.com/PurpleI2P/i2pd/issues) C++ implementation of I2P.
- **orion** and **EinMByte** for providing ```i2pcpp```: the [original](http://git.repo.i2p.xyz/w/i2pcpp.git) C++ implementation of I2P.
- **orignal** for providing ```i2pd```: an insecure and issue-ridden (but mostly-working) C++ implementation of I2P for [us to fork from](https://github.com/purplei2p/i2pd/commit/45d27f8ddc43e220a9eea42de41cb67d5627a7d3).
- **EinMByte** for improving *both* implementations.
- The ed25519/ folder is based on the [ref10 implementation from SUPERCOP](http://bench.cr.yp.to/supercop.html).
File renamed without changes.
108 changes: 108 additions & 0 deletions doc/CONTRIBUTING.md
@@ -0,0 +1,108 @@
## License

Copyright (c) 2009-2015 Pieter Hintjens.

This Specification is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This Specification is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses>.

## Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

## Goals

C4 is meant to provide a reusable optimal collaboration model for open source software projects. It has these specific goals:

- To maximize the scale and diversity of the community around a project, by reducing the friction for new Contributors and creating a scaled participation model with strong positive feedbacks;
- To relieve dependencies on key individuals by separating different skill sets so that there is a larger pool of competence in any required domain;
- To allow the project to develop faster and more accurately, by increasing the diversity of the decision making process;
- To support the natural life cycle of project versions from experimental through to stable, by allowing safe experimentation, rapid failure, and isolation of stable code;
- To reduce the internal complexity of project repositories, thus making it easier for Contributors to participate and reducing the scope for error;
- To enforce collective ownership of the project, which increases economic incentive to Contributors and reduces the risk of hijack by hostile entities.

## Design

### Preliminaries

- The project SHALL use the git distributed revision control system.
- The project SHALL be hosted on github.com or equivalent, herein called the "Platform".
- The project SHALL use the Platform issue tracker.
- The project SHOULD have clearly documented guidelines for code style.
- A "Contributor" is a person who wishes to provide a patch, being a set of commits that solve some clearly identified problem.
- A "Maintainer" is a person who merges patches to the project. Maintainers are not developers; their job is to enforce process.
- Contributors SHALL NOT have commit access to the repository unless they are also Maintainers.
- Maintainers SHALL have commit access to the repository.
- Everyone, without distinction or discrimination, SHALL have an equal right to become a Contributor under the terms of this contract.

### Licensing and Ownership

- The project SHALL use a share-alike license, such as the GPLv3 or a variant thereof (LGPL, AGPL), or the MPLv2.
- All contributions to the project source code ("patches") SHALL use the same license as the project.
- All patches are owned by their authors. There SHALL NOT be any copyright assignment process.
- The copyrights in the project SHALL be owned collectively by all its Contributors.
- Each Contributor SHALL be responsible for identifying themselves in the project Contributor list.

### Patch Requirements

- Maintainers and Contributors MUST have a Platform account and SHOULD use their real names or a well-known alias.
- A patch SHOULD be a minimal and accurate answer to exactly one identified and agreed problem.
- A patch MUST adhere to the code style guidelines of the project if these are defined.
- A patch MUST adhere to the "Evolution of Public Contracts" guidelines defined below.
- A patch SHALL NOT include non-trivial code from other projects unless the Contributor is the original author of that code.
- A patch MUST compile cleanly and pass project self-tests on at least the principle target platform.
- A patch commit message SHOULD consist of a single short (less than 50 character) line summarizing the change, optionally followed by a blank line and then a more thorough description.
- A "Correct Patch" is one that satisfies the above requirements.

### Development Process

- Change on the project SHALL be governed by the pattern of accurately identifying problems and applying minimal, accurate solutions to these problems.
- To request changes, a user SHOULD log an issue on the project Platform issue tracker.
- The user or Contributor SHOULD write the issue by describing the problem they face or observe.
- The user or Contributor SHOULD seek consensus on the accuracy of their observation, and the value of solving the problem.
- Users SHALL NOT log feature requests, ideas, suggestions, or any solutions to problems that are not explicitly documented and provable.
- Thus, the release history of the project SHALL be a list of meaningful issues logged and solved.
- To work on an issue, a Contributor SHALL fork the project repository and then work on their forked repository.
- To submit a patch, a Contributor SHALL create a Platform pull request back to the project.
- A Contributor SHALL NOT commit changes directly to the project.
- If the Platform implements pull requests as issues, a Contributor MAY directly send a pull request without logging a separate issue.
- To discuss a patch, people MAY comment on the Platform pull request, on the commit, or elsewhere.
- To accept or reject a patch, a Maintainer SHALL use the Platform interface.
- Maintainers SHOULD NOT merge their own patches except in exceptional cases, such as non-responsiveness from other Maintainers for an extended period (more than 1-2 days).
- Maintainers SHALL NOT make value judgments on correct patches.
- Maintainers SHALL merge correct patches from other Contributors rapidly.
- The Contributor MAY tag an issue as "Ready" after making a pull request for the issue.
- The user who created an issue SHOULD close the issue after checking the patch is successful.
- Maintainers SHOULD ask for improvements to incorrect patches and SHOULD reject incorrect patches if the Contributor does not respond constructively.
- Any Contributor who has value judgments on a correct patch SHOULD express these via their own patches.
- Maintainers MAY commit changes to non-source documentation directly to the project.

### Creating Stable Releases

- The project SHALL have one branch ("master") that always holds the latest in-progress version and SHOULD always build.
- The project SHALL NOT use topic branches for any reason. Personal forks MAY use topic branches.
- To make a stable release someone SHALL fork the repository by copying it and thus become maintainer of this repository.
- Forking a project for stabilization MAY be done unilaterally and without agreement of project maintainers.
- A stabilization project SHOULD be maintained by the same process as the main project.
- A patch to a stabilization project declared "stable" SHALL be accompanied by a reproducible test case.

### Evolution of Public Contracts

- All Public Contracts (APIs or protocols) SHALL be documented.
- All Public Contracts SHOULD have space for extensibility and experimentation.
- A patch that modifies a stable Public Contract SHOULD not break existing applications unless there is overriding consensus on the value of doing this.
- A patch that introduces new features to a Public Contract SHOULD do so using new names.
- Old names SHOULD be deprecated in a systematic fashion by marking new names as "experimental" until they are stable, then marking the old names as "deprecated".
- When sufficient time has passed, old deprecated names SHOULD be marked "legacy" and eventually removed.
- Old names SHALL NOT be reused by new features.
- When old names are removed, their implementations MUST provoke an exception (assertion) if used by applications.

### Project Administration

- The project founders SHALL act as Administrators to manage the set of project Maintainers.
- The Administrators SHALL ensure their own succession over time by promoting the most effective Maintainers.
- A new Contributor who makes a correct patch SHALL be invited to become a Maintainer.
- Administrators MAY remove Maintainers who are inactive for an extended period of time, or who repeatedly fail to apply this process accurately.
- Administrators SHOULD block or ban "bad actors" who cause stress and pain to others in the project. This should be done after public discussion, with a chance for all parties to speak. A bad actor is someone who repeatedly ignores the rules and culture of the project, who is needlessly argumentative or hostile, or who is offensive, and who is unable to self-correct their behavior when asked to do so by others.
10 changes: 5 additions & 5 deletions FAQ.md → doc/FAQ.md
@@ -1,12 +1,12 @@
# FAQ

## What is Kovri?
Kovri is a secure, private, untraceable C++ router implementation of the [I2P](https://geti2p.net) anonymous network, forked from i2pd.
Kovri is a secure, private, untraceable C++ router implementation of the [I2P](https://geti2p.net) anonymous network. It was originally forked from i2pd.

## What are the biggest differences between Kovri and i2pd?
As we are currently in pre-alpha, we are working on following:

- We provide both end-users and developers a [quality assurance](https://github.com/monero-project/kovri/issues/58) and [development model](https://github.com/monero-project/kovri/blob/master/CONTRIBUTING.md) in order to provide better software for everyone.
- We provide both end-users and developers a [quality assurance](https://github.com/monero-project/kovri/issues/58) and [development model](https://github.com/monero-project/kovri/blob/master/doc/CONTRIBUTING.md) in order to provide better software for everyone.
- We focus on implementing an [I2CP](https://geti2p.net/en/docs/spec/i2cp) server for any application to connect to and use the I2P network; this includes Monero.
- We focus on creating a ["secure by default"](http://www.openbsd.org/security.html), easily maintainable, more-likely-to-be-reviewed I2P router. This will come with the cost of dropping lesser-used features found in the other routers, but core functionality and I2CP will be fully intact. By creating a smaller, efficient, "bare-bones" router, we will provide developers and researchers more time for security auditing and more time to question the I2P design and specifications.
- We will implement alternative reseeding options so users can use [Pluggable Transports](https://www.torproject.org/docs/pluggable-transports.html.en) instead of HTTPS for reseed.
Expand Down Expand Up @@ -38,11 +38,11 @@ Along came anonimal who, not wanting to see everyone's work to go to waste, revi
Seeing that this sort of behavior would only hurt the I2P network, the remaining developers had [several important meetings](https://github.com/monero-project/kovri/issues/47) and Kovri was born.

## I found a bug or vulnerability. What do I do?
See our [CONTRIBUTING.md](https://github.com/monero-project/kovri/blob/master/CONTRIBUTING.md) guide for bugs.
See our [README.md](https://github.com/monero-project/kovri/blob/master/README.md) for reporting vulnerabilities.
See our [CONTRIBUTING.md](https://github.com/monero-project/kovri/blob/master/doc/CONTRIBUTING.md) guide for bugs.
See our [README.md](https://github.com/monero-project/kovri/blob/master/doc/README.md) for reporting vulnerabilities.

## What is your development cycle?
As we are in the midst of triage, we haven't fine-tuned our strategy. Given our presently available human-power, we do our best to provide (at the very least) an open collaboration model - though we aim to adhere to our present [development model](https://github.com/monero-project/kovri/blob/master/CONTRIBUTING.md).
As we are in the midst of triage, we haven't fine-tuned our strategy. Given our presently available human-power, we do our best to provide (at the very least) an open collaboration model - though we aim to adhere to our present [development model](https://github.com/monero-project/kovri/blob/master/doc/CONTRIBUTING.md).

## When is your first release?
Our release cycle has not yet been defined. Once I2CP is implemented and essential QA has been resolved, we will bring-forth a beta release.
17 changes: 3 additions & 14 deletions CONTRIBUTING.md → doc/STYLE.md
@@ -1,14 +1,13 @@
# Contributing
- The Kovri I2P Router Project welcomes all contributions.
- Firstly, please read our [CONTRIBUTING.md](https://github.com/monero-project/kovri/blob/master/doc/CONTRIBUTING.md) guide
- Every pull request and correspondence will be treated with the utmost respect and consideration.
- Don't forget: this is *your* Kovri too!

## IRC
Join us in ```#kovri-dev``` on Irc2P or Freenode; we'll be happy to say hi!

## Style
We ardently adhere to (or are in the process of adhering to) [Google's C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
Please run [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) on any applicable work before contributing to Kovri.
Please run [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) on any applicable work before contributing to Kovri and take no offense if your contribution ends up being style refactored.

In addition to the aforementioned, please consider the following:

Expand All @@ -17,25 +16,15 @@ In addition to the aforementioned, please consider the following:
- But why this specific style? Anonymity. Doing things here that wouldn't be done elsewhere helps reduce the chance of programmer correlation. This allows any contributor to *blend-in* as long as they adhere to specifics.
- Lines should be <=80 spaces unless impossible to do so (see [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint)).
- ```XXX``` and any unassigned ```TODO```'s should be marked instead as ```TODO(unassigned):``` so Doxygen can catch them.
- Always use ```// C++ comments``` unless they span more than 10 lines (give or take). When that happens, a traditional
- Always use three-slash ```/// C++ comments``` for Doxygen unless the comments span more than 10 lines (give or take). When that happens, a traditional
```c
/**
* should suffice
*/
```
- Extensive code that *does* something (more than simply return or more than a hand-ful of lines) should go in a .cpp instead of .h unless it is absolutely necessary to fulfill some abstraction layer.
- ``if/else`` statements should never one-liner. Nothing bracketed should one-liner unless it is empty (see vertical theory above).
- Please remove EOL whitespace: ```'s/ *$//g'``` (see [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint)).
- New files should maintain consistency with other filename case, e.g., CryptoPP_rand.h instead of cryptopp_rand.h
- English punctuation will help clarify questions about the comments. For example:
```cpp
// key file does not exist, let's say it's new
// after we fall out of scope of the open file for the keys we'll add it
createTunnel = true;
```
So, is it "let's say it's new after we fall out of scope" or a completely different thought?
The code that is commented on isn't a dead give-away and requires the reader to expend more time analyzing. A simple english consideration could help with review.

- Pointers: reference/dereference operators on the left (attached to datatype) when possible.
- Class member variables are prepended with m_
- Enumerators are prepended with e_
Expand Down

0 comments on commit 51dcb23

Please sign in to comment.