diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..f64ffb04 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Protocol Labs Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 0279f9b0..31119d2e 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,34 @@ -multicodec -========== +# multicodec -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/project-multiformats-blue.svg?style=flat-square)](http://github.com/multiformats/multiformats) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> self-describing protocol/encoding streams (note: a file is a stream). It's designed to address the perennial problem: +> self-describing codecs -> I have a bitstring, what codec is the data coded with!? - -> Instead of arguing about which data serialization library is the best, let's just pick the simplest one now, and build _upgradability_ into the system. Choices are never _forever_. Eventually all systems are changed. So, embrace this fact of reality, and build change into your system now. +## Table of Contents -> multicodec frees you from the tyranny of past mistakes. Someone wise said "every choice (in computing) is eventually incorrect". Instead of trying to figure it all out beforehand, or continue using something that we can all agree no longer fits, why not allow the system to _evolve_ and _grow_ with the use cases of today, not yesterday. +- [Motivation](#motivation) +- [How does it work? - Protocol Description](#how-does-it-work---protocol-description) +- [Prefix examples](#prefix-examples) +- [prefix - codec - desc](#prefix---codec---desc) +- [The protocol path](#the-protocol-path) +- [Implementations](#implementations) +- [FAQ](#faq) +- [Maintainers](#maintainers) +- [Contribute](#contribute) +- [License](#license) ## Motivation +Multicodecs are self-describing protocol/encoding streams. (Note that a file is a stream). It's designed to address the perennial problem: + +> I have a bitstring, what codec is the data coded with!? + +Instead of arguing about which data serialization library is the best, let's just pick the simplest one now, and build _upgradability_ into the system. Choices are never _forever_. Eventually all systems are changed. So, embrace this fact of reality, and build change into your system now. + +Multicodec frees you from the tyranny of past mistakes. Instead of trying to figure it all out beforehand, or continue using something that we can all agree no longer fits, why not allow the system to _evolve_ and _grow_ with the use cases of today, not yesterday. + To decode an incoming stream of data, a program must either (a) know the format of the data a priori, or (b) learn the format from the data itself. (a) precludes running protocols that may provide one of many kinds of formats without prior agreement on which. multistream makes (b) neat using self-description. Moreover, this self-description allows straightforward layering of protocols without having to implement support in the parent (or encapsulating) one. @@ -118,7 +134,7 @@ These path names happen to be resolvable -- not just in a "multicodec muxer(e.g - [clj-multicodec](https://github.com/greglook/clj-multicodec) -# FAQ +## FAQ > **Q. Why?** @@ -137,3 +153,17 @@ Because they're the same thing. Which one of these is the encoder and which the 5555 ----[ THING ]---> 8888 5555 <---[ THING ]---- 8888 + +## Maintainers + +Captain: [@jbenet](https://github.com/jbenet). + +## Contribute + +Contributions welcome. Please check out [the issues](https://github.com/multiformats/multicodec/issues). + +Check out our [contributing document](https://github.com/multiformats/multiformats/blob/master/contributing.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). + +## License + +[MIT](LICENSE) © Protocol Labs, Inc