{"id":39127374,"url":"https://github.com/mickael-carl/sophons","last_synced_at":"2026-01-17T21:01:22.551Z","repository":{"id":317443895,"uuid":"1066725383","full_name":"mickael-carl/sophons","owner":"mickael-carl","description":"A fast, Ansible-compatible, configuration management tool.","archived":false,"fork":false,"pushed_at":"2025-12-02T23:04:52.000Z","size":245,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-04T11:37:29.664Z","etag":null,"topics":["ansible","devops","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mickael-carl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-29T21:50:38.000Z","updated_at":"2025-12-02T23:04:55.000Z","dependencies_parsed_at":"2025-09-30T23:28:53.369Z","dependency_job_id":"bcdf880a-18ee-40e0-bbb2-edcac9f80bd8","html_url":"https://github.com/mickael-carl/sophons","commit_stats":null,"previous_names":["mickael-carl/sophons"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mickael-carl/sophons","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickael-carl%2Fsophons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickael-carl%2Fsophons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickael-carl%2Fsophons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickael-carl%2Fsophons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mickael-carl","download_url":"https://codeload.github.com/mickael-carl/sophons/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mickael-carl%2Fsophons/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28518607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","devops","golang"],"created_at":"2026-01-17T21:01:21.664Z","updated_at":"2026-01-17T21:01:22.542Z","avatar_url":"https://github.com/mickael-carl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sophons\n\nA fast, Ansible-compatible, configuration management tool.\n\n## Status\n\nThis is **extremely alpha state**. At time of writing only some operations are\nsupported with the most basic support.\n\nThe following still need implementation (in order of priority, not an exhaustive\nlist):\n  * most Ansible builtins (see [docs/builtin.md](docs/builtin.md))\n  * better roles support (handlers, etc)\n  * secure execution\n  * better SSH support (password auth, reading SSH config, etc)\n  * collections\n  * extensibility\n  * agent mode (long-running vs current implementation that's short-lived)\n\n### Speed\n\nBecause of its implementation, Sophons is **orders of magnitude** faster than\nAnsible. A simple benchmark of creating 1000 file one after the other against a\nmachine on the same LAN has Ansible clocking in at **500 seconds** of execution\ntime. Sophons does as much in **2 seconds**.\n\nOf course this \"benchmark\" is extremely simplistic and does not leverage\nparallel execution, nor is it fully representative. But it demonstrates well why\nSophons can be much much faster than Ansible.\n\n### Security\n\nAt time of writing, the execution model means every host gets the full playbook\nroles and files, including potentially sensitive information. This is very\nobviously problematic as an attacker could leverage that to retrieve e.g.\ncredentials by simply adding a node to the inventory. This will get addressed in\ntime.\n\nDo note that this project has not seen any review by a security professional and\nthus **should not be used in production**.\n\n### Compatibility\n\nCurrently compatibility with Ansible is on a best-effort basis. Some peculiar\nbehaviour of Ansible may be dropped in favor of a saner or faster\nimplementation.\n\nDo note also that Windows support is not planned at time of writing.\n\n## Usage\n\n### Local Execution\n\nSimply run the `executer` binary, passing in the playbook to run as argument:\n\n```shell\nexecuter playbook.yaml\n```\n\n### Remote Execution\n\nThe `dialer` binary expected pre-compiled binaries to be available ahead of time\nto the target OSes and architecture, e.g.:\n\n```shell\n❯ ls bin/\nexecuter-darwin-arm64  executer-darwin-x86_64  executer-linux-arm64  executer-linux-x86_64\n```\n\nOnce available, the `dialer` can be run as follows:\n\n```shell\ndialer -b bin/ -i inventory.yaml playbook.yaml\n```\n\nFlags are available to provide an SSH username and private key. See `dialer -h`\nfor more information.\n\n## Architecture\n\nThe main idea behind making Sophons fast is realising that Ansible's own\nexecution model is flawed: it copies a Python script to the controlled host for\nevery task and executes it. Instead Sophons is decomposed in two small\ncomponents:\n* an executer, tasked with running the actual operations against the host\n  without the network overhead for each task,\n* a dialer, that connects to controlled nodes, copies all the necessary data and\n  the executer and then runs it for local execution.\n\n## Why\n\n### Speed\n\nAnsible is unbelievably slow for 2 main reasons:\n* it relies on Python\n* it relies on SSH\n\nUnfortunately it's the combination of the two, and Ansible's design, that make\nit so incredibly slow: Ansible needs to SSH to every node for every task,\nand then execute Python code. If the controller node is hosted far from the\ncontrolled nodes (a reasonable situation: imagine a Europe-based remote employee\nat a large California-centric tech company), then each task will add significant\nlatency to its duration. On top of that starting Python itself for each task\nwill further increase the duration, magnified by the fact that Python code is\nalso not incredibly fast in the first place.\n\nThose problems are solvable without ditching Python or SSH. Some prior art in\nimproving speed of execution include\n[Mitogen](https://mitogen.networkgenomics.com/ansible_detailed.html). Similarly,\nthe Python overhead can be minimised. That being said doing so would require an\nalmost full rewrite of Ansible, which at time of writing looks extremely\nunlikely.\n\n### Evolution of Systems Design\n\nSince the inception of the biggest configuration engines the likes of Ansible\n(Puppet, SaltStack, Chef, etc), a lot has happened in improving how distributed\nsystems interact. Unfortunately no configuration engine that has taken\nadvantages of recent technologies has seen large-scale adoption.\n\nThis project aims to apply the last decade of learnings to what is essentially a\ndistributed systems problem. It seeks to build a reliable, fast, correct and\nsecure configuration engine, without compromising on compatibility or ease of\nuse.\n\n### Naming\n\nAn Ansible is a device mention in Ursula K. Le Guin's novels that allows\nfaster-than-light communication, albeit with limited bandwidth. By comparison,\nSophons are devices from Liu Cixin's Three Body Problem novels, that allow\naccessing any electronic device and communicate back instantaneously, i.e. a FTL\ncommunication device with no bandwidth limitation. It felt fitting to pick a\ndevice with better capabilities than the \"plain\" (though admittedly beyond\nanything that presently exists) ansible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmickael-carl%2Fsophons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmickael-carl%2Fsophons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmickael-carl%2Fsophons/lists"}