# Tox (protocole)

Tox est un protocole réseau ouvert de messagerie instantanée, voix sur IP et visioconférence, fonctionnant en pair à pair et chiffré. Le but affiché du projet est de fournir à tous une communication sécurisée et aisée et une alternative à Skype. Une implémentation de référence est disponible sous la licence libre GNU GPL 3 ou supérieure.

## Histoire

Tox a débuté le 22 juin 2013, sur 4chan, dans un sujet concernant la vie privée des utilisateurs de Skype par rapport aux révélations d'Edward Snowden liées à la surveillance globale, lesquelles s'étaient produites quelques semaines auparavant. Le nom de Tox fut suggéré et fut accepté officiellement du fait de son usage persistant.
La publication officielle sur GitHub a été effectuée le 23 juin 2013 par un utilisateur nommé irungentoo. Des binaires de test pré-alpha ont été rendus disponibles aux utilisateurs à partir du 3 février 2014.
Des nightly builds de Tox (littéralement des constructions nocturnes, c'est-à-dire des versions réalisées et mises à disposition en soirée ou pendant la nuit) sont continuellement publiées par l'automate Jenkins.
Le 12 juillet 2014, Tox est entré dans le stade alpha de son développement et une page de téléchargement rénovée a été créée pour l'occasion.

## Fonctionnalités

Les utilisateurs se voient assigner une clé publique et une clé privée, puis se connectent les uns aux autres directement dans un réseau pair à pair. Ils ont la possibilité d'envoyer des messages à leurs amis, de se joindre à des salons de discussion avec des amis ou des étrangers, ainsi que de s'échanger des fichiers. Tout est chiffré en utilisant les bibliothèques libsodium (software) (en) ou NaCl (software) (en).
En février 2014, les appels audio et vidéo, ainsi que les conférences étaient toujours en cours d'implémentation.
En août 2014, ces fonctionnalités étaient prêtes dans tous les clients principaux.
Le client officiel a pour objectif de fournir le support de la messagerie instantanée, des salons de discussion, des appels vocaux et de la visioconférence, de l'indication de frappe, des accusés de réception, de la technologie push to talk, de la technologie de partage de fichiers et du partage d'écran.
Des fonctionnalités supplémentaires peuvent être implémentées par n'importe quel client, du moment qu'elles sont supportées par le protocole principal. Les fonctionnalités qui ne sont pas liées au système principal de réseau sont laissées à la discrétion du client.

## Architecture
### Principale

L'architecture du projet Tox est basée sur une bibliothèque principale (cœur) établissant le protocole et l'API. La première API stable nommée Toxcore est sortie le 14 décembre 2016, sous le numéro 0.10. Les front-ends des utilisateurs, ou clients, sont construits au-dessus de ce cœur. N'importe qui peut créer un client utilisant le cœur.
Un rapport technique décrivant la conception du cœur, écrit par son développeur irungentoo et mis à jour occasionnellement, est disponible publiquement depuis août 2014 sur le Jenkins de la Tox Foundation.

### Protocole

Le cœur de Tox est une implémentation du protocole Tox. Il s'agit donc d'un exemple de la couche application du modèle OSI et probablement de la couche présentation.
Il existe des implémentations du protocole Tox qui ne sont pas issues du projet, tel que par exemple Xot.
Tox utilise le format audio Opus et le format vidéo VPX (VP8 en 2015). Le protocole SIP n'est pas utilisé.

### Clients

Un client est un programme qui utilise la bibliothèque Tox principale pour communiquer avec d'autres utilisateurs du protocole Tox. Le mock-up du site officiel représente le client GTK+ Venom, mais beaucoup d'autres clients sont disponibles pour une large variété de systèmes.
Les clients officiels sont :
| Système d'exploitation | Nom du client | Écrit en… |
| Linux, Windows, OS X, BSD, Android | µTox | C (API Win32, Xlib) |
| FreeBSD, Linux, OS X, Windows | qTox | C++ (Qt) |
| FreeBSD, Linux, OS X | Toxic | C |
| Linux, Windows | Toxygen | Python 3 |
| FreeBSD, Linux, OpenIndiana | Venom | Vala (GTK+) |
| Android | TRIfA | C, Java |
| Android | ATox | Kotlin |
| iOS (7.0+) | Antidote | Objective-C |
Autres projets utilisant le protocole Tox :
* Otruta : premier projet à utiliser le protocole Tox dans son propre réseau. Otruta est un « outil de talkie-walkie crypto-protégé » à l'usage des activistes pour communiquer dans des situations dangereuses. Aucun code n'a encore été soumis sur la page GitHub. Ce projet a été accepté par le Project Tox dans le cadre du Google Summer of Code 2014.
* ToxSync : synchronisation chiffrée de fichiers utilisant le protocole Tox. Synchronise des répertoires entre les dispositifs de l'utilisateur qui utilisent des clients ToxSync. Pas encore fonctionnel (novembre 2014). Constitue une alternative au logiciel BitSync.
Il existe aussi un plugin Tox pour Pidgin.
Le client tierce partie ratox, basé sur des tubes nommés et réalisé par plusieurs membres du projet suckless.org, est également disponible.

## Réception

Tox a fait l'objet d'une énorme couverture médiatique au cours des premières étapes de sa conception, attirant l'attention de sites d'information technologique du monde entier$^,$$^,$$^,$.
Le 15 août 2013, Tox était numéro cinq sur la liste des projets les plus tendance de GitHub.
Des inquiétudes au sujet de fuites de métadonnées ont été soulevées. Les développeurs y ont alors répondu en implémentant un routage en oignon pour le processus de recherche d'amis.
La fondation Tox (dont les développeurs se sont séparés depuis) puis le projet Tox a été acceptée par le Google Summer of Code en qualité d'organisation mentor en 2014 et 2015$^,$.