L

libmammut

Small, lightweight C library for the Mastodon social network

public
 

======================
README for libmammut
======================
:Author:
* **A. Wilcox**, primary maintainer
:Status:
Experimental
:Copyright:
© 2017 A. Wilcox. NCSA open source licence.

Introduction
============

This repository contains the libmammut C library for the open-source Mastodon
social network.

Requirements
============

Background
----------
Mastodon is an exciting new social network that is fully open-source. It is
federated, meaning that many people can run their own instances how they see
fit and network with other instances. This allows communities to grow
organically. In addition, due to its open-source nature, data can be freely
exported and imported between instances. It does not rely on ad revenue,
instead being volunteer-driven, so there are no privacy concerns beyond the
administrators of a chosen instance.

However, Mastodon's current user interface is a Web client that requires a
signficant amount of computing power to display. It relies heavily on bloated
JavaScript frameworks and has many memory and DOM node leaks. As such, it is
unusable on older computers, which prevents two main classes of people from
fully enjoying the freedom and powerful of Mastodon: those who cannot afford
the latest and greatest technology, and those who wilfully do not wish to
upgrade.

Poverty in the developed world is growing rapidly, and this affects the
ability of those impoverished to afford newer computers. They still need
socialisation and friends just as everyone else, and they deserve the ability
to have their voices heard.

Privacy is a large concern of those technically minded, and newer computers
contain technologies like Intel® ME, AMD PSP, AMT, TPM, and other such nasties
that prevent the user from knowing that their computer is not executing any
low-level forms of malware or intrusion (keylogging, network packet sniffing,
et cetera). Some therefore will not upgrade their computers past those that
can run libre firmwares like CoreBoot and OpenBoot.

For these users, Mastodon is either a painful experience, or an experience
they are wholly unable to have.

In addition, those otherwise unaffected by the above issues may still have
problems with the bloated UX presented by Mastodon: their computers may be
running slower, they could be using more power (contributing to climate
change), having less battery life, and more.

Therefore, a new way to experience Mastodon without the ills of the bloated
JavaScript frameworks is required.

Opportunity
-----------
The Mastodon community is growing every day, and there have been a number of
calls for native client software that does not require the use of a Web
browser. Currently, Mastodon API bindings are available in 14 languages;
however, 11 of them are interpreted and only three of them would allow a
user-friendly desktop UX to be rapidly built in the same language (C#, Java,
and Swift).

Objectives / success criteria
-----------------------------
#. Full compatibility with Mastodon 1.4.1 API.

#. At least 5,000 downloads within one month of release.

#. At least 2,000 active users within one month of release.

#. Multiple contributors.

Solution vision
===============

Vision statement
----------------
For Mastodon social network users, libmammut is the core library that is used
by developers to create great desktop (and possibly mobile) applications that
are lightweight, portable, and easy to use.

Major features
--------------
#. Full compatibility with Mastodon 1.4.1 API.

#. Per-account state object to allow more than one account to be used during
runtime.

#. Portable to any system with a C99 compiler and OpenSSL.

Assumptions
-----------
#. It is assumed that OpenSSL is available on all client computers.

#. It is assumed that shims will be provided for compilers that do not meet
C99 specification.

#. It is assumed that Berkeley sockets as specified in IEEE 1003.1-2001 are
available on all client computers.

#. It is assumed that the Mastodon API will remain backwards compatible to
allow the library to not require frequent updates.

Dependencies
------------
#. OpenSSL.

Usage
=====

This section contains usage information for this repository.

Compilation
```````````

[tbd]

On a Gentoo computer
````````````````````

[overlay tbd]