2017-11-30 19:30:19 +01:00
|
|
|
# This — is The **Construct**
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2018-01-10 10:19:04 +01:00
|
|
|
<img align="right" src="https://i.imgur.com/TIf8kEC.png" />
|
2017-10-16 06:12:18 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
#### Internet Relay Chat daemon: *Matrix Construct*
|
2016-01-23 20:52:57 +01:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
IRCd was a free and open source server which facilitated real-time communication over the
|
2017-11-05 06:14:33 +01:00
|
|
|
internet. It was started by Jarkko Oikarinen in 1988 at the University of Oulu and [its
|
2017-10-25 18:24:50 +02:00
|
|
|
derivatives](https://upload.wikimedia.org/wikipedia/commons/d/d8/IRCd_software_implementations.png)
|
2017-11-30 19:30:19 +01:00
|
|
|
underpinned the major IRC networks for decades.
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
Due to its age and stagnation since the mid-2000's, a growing number of proprietary cloud services
|
|
|
|
are now filling the vacuum of innovation. In 2014 a new approach was proposed to reinvigorate
|
2018-01-18 15:03:59 +01:00
|
|
|
real-time communication for free and open source software: a *federation of networks* known as
|
2018-01-07 06:37:29 +01:00
|
|
|
*the matrix*.
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-04-26 03:49:58 +02:00
|
|
|
<h4 align="right">
|
|
|
|
IRCd has been rewritten for the global federation of networks  
|
|
|
|
</h4>
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-04-29 03:47:54 +02:00
|
|
|
<img align="right" src="https://i.imgur.com/DUuGSrH.png" />
|
2018-04-21 12:24:50 +02:00
|
|
|
|
2017-12-25 06:41:13 +01:00
|
|
|
**This is the Construct** — the first Matrix server written in C++. It is designed to be
|
|
|
|
fast and highly scalable, and to be community developed by volunteer contributors over
|
|
|
|
the internet. This mission strives to make the software easy to understand, modify, audit,
|
|
|
|
and extend. It remains true to its roots with its modular design and having minimal
|
2018-05-17 01:34:58 +02:00
|
|
|
requirements.
|
|
|
|
|
|
|
|
Even though all of the old code has been rewritten, the same spirit and
|
2017-12-25 06:41:13 +01:00
|
|
|
_philosophy of its predecessors_ is still obvious throughout.
|
2017-09-26 23:10:02 +02:00
|
|
|
|
2018-04-26 03:49:58 +02:00
|
|
|
Similar to the legacy IRC protocol's origins, Matrix wisely leverages technologies in vogue
|
|
|
|
for its day to aid the virility of implementations. A vibrant and growing ecosystem
|
|
|
|
[already exists](https://matrix.org/docs/projects/try-matrix-now.html).
|
|
|
|
|
2018-05-02 21:34:59 +02:00
|
|
|
<br />
|
|
|
|
|
2017-09-26 23:10:02 +02:00
|
|
|
#### Dependencies
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-04-26 03:49:58 +02:00
|
|
|
- **Boost** (1.66 or later)
|
2017-12-23 04:46:57 +01:00
|
|
|
Replacing libratbox with the rich and actively developed libraries.
|
|
|
|
|
|
|
|
- **RocksDB** (based on LevelDB):
|
|
|
|
A lightweight and embedded database superseding sqlite3.
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
- **Sodium** (NaCl crypto):
|
|
|
|
Provides ed25519 required for the Matrix Federation.
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
- **OpenSSL** (libssl/libcrypto):
|
|
|
|
Provides HTTPS TLS / X.509 / etc.
|
2017-10-01 04:14:45 +02:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- **GNU C++ compiler**, **automake**, **autoconf**, **autoconf2.13**,
|
|
|
|
**autoconf-archive**, **libtool**, **shtool**
|
2017-12-23 04:46:57 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
##### Additional dependencies
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- **libmagic** (~Optional~):
|
2018-02-18 04:48:36 +01:00
|
|
|
Content MIME type recognition.
|
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- **zlib** or **lz4** or **snappy** (Optional):
|
|
|
|
Provides compression for the database, etc.
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2017-12-02 22:14:30 +01:00
|
|
|
*Notes*:
|
|
|
|
- libircd requires a platform capable of loading dynamic shared objects at runtime.
|
|
|
|
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
#### Platforms
|
|
|
|
|
2018-05-17 01:34:58 +02:00
|
|
|
[![Construct](https://img.shields.io/SemVer/v0.0.0-dev.png)](https://github.com/jevolk/charybdis/tree/master)
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
| <sub> Continuously Integrated Host </sub> | <sub> Compiler </sub> | <sub> Third party </sub> | <sub> Status </sub> |
|
|
|
|
|:------------------------------------------- |:------------------------ |:------------------------ |:------------------- |
|
2018-05-17 01:34:58 +02:00
|
|
|
| <sub> Linux Ubuntu 16.04 Xenial </sub> | <sub> GCC 6 </sub> | <sub> Boost 1.66 </sub> | [![POSIX Build Status](https://travis-ci.org/jevolk/charybdis.svg?branch=master)](https://travis-ci.org/jevolk/charybdis) |
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-05-17 01:34:58 +02:00
|
|
|
## Installation
|
|
|
|
|
|
|
|
<a href="https://github.com/tulir/gomuks">
|
|
|
|
<img align="right" src="https://i.imgur.com/30zJfPb.png" />
|
|
|
|
</a>
|
|
|
|
|
|
|
|
### Building from git (RELEASE)
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
./autogen.sh
|
|
|
|
./configure
|
|
|
|
make
|
|
|
|
sudo make install
|
|
|
|
```
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2018-05-17 01:34:58 +02:00
|
|
|
#### Building from git (DEVELOPER PREVIEW)
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2018-05-17 01:34:58 +02:00
|
|
|
*This is only intended to allow isolated development with dependencies that have not made
|
|
|
|
their way to mainstream systems yet.*
|
|
|
|
**Not for release.**
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
./autogen.sh
|
|
|
|
mkdir build
|
|
|
|
```
|
|
|
|
|
2017-09-23 07:19:47 +02:00
|
|
|
- The install directory may be this or another place of your choosing.
|
|
|
|
- If you decide elsewhere, make sure to change the `--prefix` in the `./configure`
|
|
|
|
statement below.
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
CXX=g++-6 ./configure --prefix=$PWD/build --enable-debug --with-included-boost=shared --with-included-rocksdb=shared
|
|
|
|
```
|
|
|
|
|
2017-09-23 07:19:47 +02:00
|
|
|
- Many systems alias `g++` to an older version. To be safe, specify a version manually
|
|
|
|
in `CXX`. This will also build the submodule dependencies with that version.
|
|
|
|
- The `--with-included-*` will fetch, configure **and build** the dependencies included
|
|
|
|
as submodules. Include `=shared` for now until static libraries are better handled.
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
```
|
2016-03-23 21:10:44 +01:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
## Developers
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2017-12-12 22:58:10 +01:00
|
|
|
[![](https://img.shields.io/badge/License-BSD-brightgreen.svg)]() [![](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)]()
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
* Generate doxygen using `/usr/bin/doxygen tools/doxygen.conf` the target
|
|
|
|
directory is doc/html. Browse to doc/html/index.html
|
2016-03-06 00:49:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
## Plan
|
|
|
|
|
|
|
|
#### Roadmap for service
|
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] **Phase One**: Matrix clients using HTTPS.
|
|
|
|
- [ ] **Phase Two**: Legacy IRC networks using TS6 protocol.
|
|
|
|
- [ ] **Phase Three**: Legacy IRC clients using RFC1459 / RFC2812 legacy grammars.
|
2018-01-18 15:03:59 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
#### Roadmap for deployments
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
The deployment mode is a macro of configuration variables which tune the daemon
|
|
|
|
for how it is being used. Modes mostly affect aspects of local clients.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] **Personal**: One or few users. Few default restrictions; higher log output.
|
|
|
|
- [ ] **Company**: Hundreds of users. Moderate default restrictions.
|
|
|
|
- [ ] **Public**: Thousands of users. Untrusting configuration defaults.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
#### Roadmap for innovation
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] Phase Zero: **Core libircd**: Utils; Modules; Contexts; JSON; Database; HTTP; etc...
|
|
|
|
- [x] Phase One: **Matrix Protocol**: Core VM; Core modules; Protocol endpoints; etc...
|
|
|
|
- [ ] Phase Two: **Construct Cluster**: Kademlia sharding of events; Maymounkov's erasure codes.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
##### Experimental section
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
- [ ] Phase Three: **Graduate Seminar**
|
|
|
|
- Tromer/Virza's zkSNARK applied to JavaScript XDR evaluation verifying the distributed
|
|
|
|
execution of a matrix room using MNT pairing curves.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
- [ ] Phase Four: **Dissertation Defense**
|
|
|
|
- Phase Three _with RingLWE_; GPU accelerated matrix multiplication for
|
|
|
|
the number theoretic transform...
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
- [ ] Phase Five: **Habilitation**
|
|
|
|
- Phase Four _under fully homomorphic encryption_.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
### IRCd Library
|
2016-03-06 00:49:13 +01:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
This library can be embedded by developers creating their own server or those
|
2017-11-30 20:44:23 +01:00
|
|
|
who simply want to use the library of routines it provides.
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2018-02-16 03:32:03 +01:00
|
|
|
Including libircd headers will not include any other headers beyond those in
|
|
|
|
the standard library, with minimal impact on your project's compile complexity.
|
|
|
|
The prototypical embedding of `libircd` is `construct` found in the
|
|
|
|
`construct/` directory.
|
2016-03-23 21:10:44 +01:00
|
|
|
|
2018-02-16 03:32:03 +01:00
|
|
|
- Can be embedded in your application with very minimal overhead.
|
|
|
|
|
|
|
|
- Runs only one server at a time.
|
|
|
|
|
|
|
|
- Is asynchronous and single-threaded✝.
|
|
|
|
|
|
|
|
- Introduces its own userspace threading.
|
|
|
|
|
|
|
|
- Leverages fast & safe formal grammars.
|
2017-08-23 23:45:41 +02:00
|
|
|
|
2018-02-16 03:32:03 +01:00
|
|
|
See the `include/ircd/` and `ircd/` directories for more information.
|