2017-11-30 19:30:19 +01:00
# This — is The **Construct**
2015-02-25 03:32:08 +01:00
2018-09-18 12:36:47 +02:00
< a href = "share/webapp" >
< img align = "right" src = "https://i.imgur.com/TIf8kEC.png" / >
< / a >
2017-10-16 06:12:18 +02:00
2019-06-22 02:18:05 +02:00
It all started in 1988 when Jarkko Oikarinen developed a free and open source server
at the University of Oulu which facilitated real-time communication over the internet.
Its [derivatives ](https://upload.wikimedia.org/wikipedia/commons/d/d8/IRCd_software_implementations.png )
2019-08-21 03:24:06 +02:00
have underpinned the major chat networks for decades ever since.
2017-09-09 14:50:16 +02:00
2019-08-21 03:24:06 +02:00
Due to their age and stagnation since the mid-2000's, a growing number of
proprietary cloud services have filled the vacuum of innovation. In 2014 a new
approach was proposed to reinvigorate real-time communication for free and open
source software: a *federation of networks* known as *the matrix* .
2017-08-18 00:33:22 +02:00
2018-09-18 12:36:47 +02:00
< a href = "https://github.com/vector-im/riot-web/" >
< img align = "right" src = "https://i.imgur.com/DUuGSrH.png" / >
< / a >
2018-04-21 12:24:50 +02:00
2019-02-16 22:50:23 +01:00
**This is the Construct** — the community's own Matrix server. It is designed to be
fast and highly scalable, and to be developed by volunteer contributors over
2017-12-25 06:41:13 +01:00
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
2019-06-03 02:43: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
2019-06-03 02:43:58 +02:00
Matrix is about giving you control over your communication; Construct is about
2019-09-13 19:39:38 +02:00
giving you control over Matrix.
2018-09-14 09:53:37 +02:00
## Installation
2017-08-18 00:33:22 +02:00
2018-09-14 09:53:37 +02:00
< a href = "https://github.com/tulir/gomuks" >
< img align = "right" src = "https://i.imgur.com/YMUAULE.png" / >
< / a >
2017-10-01 04:14:45 +02:00
2019-09-16 18:09:47 +02:00
[![Chat in #test:zemos.net ](https://img.shields.io/matrix/test:zemos.net.svg?label=Chat%20in%20%23test%3Azemos.net&logo=matrix&server_fqdn=matrix.org&style=for-the-badge&color=brightgreen )](https://matrix.to/#/#test:zemos.net)
2018-09-14 09:53:37 +02:00
### Dependencies
2017-12-25 06:41:13 +01:00
2019-02-16 22:50:23 +01:00
- **Boost** library 1.66+
- **RocksDB** library 5.16.6.
- **Sodium** library for curve ed25519.
- **OpenSSL** library for HTTPS TLS / X.509.
2019-05-30 16:31:12 +02:00
- **Magic** library for MIME type recognition.
2019-05-30 07:11:46 +02:00
##### Optional
- **zlib** or **lz4** or **snappy** database compressions.
2019-05-30 16:31:12 +02:00
- **GraphicsMagick** for media thumbnails.
2019-07-04 06:37:35 +02:00
- **jemalloc** for dynamic memory.
2017-09-23 07:19:47 +02:00
2018-09-14 03:12:22 +02:00
##### Build tools
2019-09-11 18:22:02 +02:00
- **GNU C++** compiler, automake, autoconf, autoconf2.13,
2018-09-14 09:53:37 +02:00
autoconf-archive, libtool.
2018-09-14 03:12:22 +02:00
- A platform capable of loading dynamic shared objects at runtime is required.
2017-12-02 22:14:30 +01:00
2018-09-14 03:12:22 +02:00
<!--
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) |
2018-09-14 03:12:22 +02:00
| < sub > Linux Ubuntu 16.04 Xenial </ sub > | < sub > GCC 8 </ sub > | < sub > Boost 1.66 </ sub > | [![POSIX Build Status ](https://travis-ci.org/jevolk/charybdis.svg?branch=master )](https://travis-ci.org/jevolk/charybdis) |
| < sub > Linux Ubuntu 18.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
2019-06-22 02:26:15 +02:00
### Getting Started
2017-08-18 00:33:22 +02:00
2019-06-22 02:26:15 +02:00
1. At this phase of development the best thing to do is pull the master branch
2018-09-14 01:56:58 +02:00
and use the latest head.
2019-06-22 02:26:15 +02:00
2. See the [BUILD ](doc/BUILD.md ) instructions to compile Construct from source.
2018-09-04 07:03:32 +02:00
2019-06-22 02:26:15 +02:00
3. See the [SETUP ](doc/SETUP.md ) instructions to run Construct for the first time.
2019-04-17 01:01:28 +02:00
2019-06-22 02:26:15 +02:00
##### TROUBLESHOOTING
2019-04-17 01:01:28 +02:00
2019-06-04 06:47:26 +02:00
See the [TROUBLESHOOTING ](doc/TROUBLESHOOTING.md ) guide for solutions to possible
problems.
2019-04-17 01:01:28 +02:00
2017-11-30 19:30:19 +01:00
## Developers
2015-02-25 03:32:08 +01:00
2018-05-22 13:16:45 +02:00
< a href = "https://github.com/mujx/nheko" >
< img align = "right" src = "https://i.imgur.com/GQ91GOK.png" / >
< / a >
2019-09-16 18:09:47 +02:00
[![ ](https://img.shields.io/badge/License-BSD-brightgreen.svg?label=%20license&style=for-the-badge&color=brightgreen )]() [![ ](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?label=contributions&style=for-the-badge&color=brightgreen )]()
2017-12-12 22:58:10 +01:00
2019-09-16 19:01:43 +02:00
##### DOCUMENTATION
2019-09-16 18:09:47 +02: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
2019-09-16 19:28:34 +02:00
##### ARCHITECTURE GUIDE
2019-09-16 19:01:43 +02:00
2019-09-16 19:28:34 +02:00
See the [ARCHITECTURE ](doc/ARCHITECTURE.md ) summary for design choices and
things to know when starting out.
##### DEVELOPMENT STYLE GUIDE
See the [STYLE ](doc/STYLE.md ) guide for an admittedly tongue-in-cheek lecture on
the development approach.
2019-09-16 19:01:43 +02: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.
2018-05-24 01:28:47 +02:00
- [ ] **Phase Two** : Legacy IRC network TS6 protocol.
2018-04-21 12:24:50 +02:00
- [ ] **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.