{"id":13478614,"url":"https://github.com/shadow/shadow","last_synced_at":"2025-05-14T09:07:31.092Z","repository":{"id":1504374,"uuid":"1759835","full_name":"shadow/shadow","owner":"shadow","description":"Shadow is a discrete-event network simulator that directly executes real application code, enabling you to simulate distributed systems with thousands of network-connected processes in realistic and scalable private network experiments using your laptop, desktop, or server running Linux.","archived":false,"fork":false,"pushed_at":"2025-05-13T00:10:12.000Z","size":32597,"stargazers_count":1552,"open_issues_count":194,"forks_count":251,"subscribers_count":49,"default_branch":"main","last_synced_at":"2025-05-14T09:07:02.027Z","etag":null,"topics":["control","emulation","experimentation","networking","realism","scalability","science-research","scientific-computing","simulation","tor"],"latest_commit_sha":null,"homepage":"https://shadow.github.io","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shadow.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":"docs/supported_platforms.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-05-17T08:18:57.000Z","updated_at":"2025-05-12T14:31:20.000Z","dependencies_parsed_at":"2023-09-28T03:48:47.821Z","dependency_job_id":"b12dd1c9-316e-4fc6-a1c2-be53cd95e19c","html_url":"https://github.com/shadow/shadow","commit_stats":{"total_commits":7261,"total_committers":54,"mean_commits":"134.46296296296296","dds":0.6490841481889547,"last_synced_commit":"450eba79a2beeef522d471ccf70e042304902c60"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shadow%2Fshadow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shadow%2Fshadow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shadow%2Fshadow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shadow%2Fshadow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shadow","download_url":"https://codeload.github.com/shadow/shadow/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254110374,"owners_count":22016391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["control","emulation","experimentation","networking","realism","scalability","science-research","scientific-computing","simulation","tor"],"created_at":"2024-07-31T16:01:59.411Z","updated_at":"2025-05-14T09:07:31.032Z","avatar_url":"https://github.com/shadow.png","language":"Rust","readme":"# The Shadow Simulator\n\n## Quickstart\n\nAfter installing the [dependencies](https://shadow.github.io/docs/guide/install_dependencies.html): build, test, and install Shadow into `~/.local`:\n\n```\n$ ./setup build --clean --test\n$ ./setup test\n$ ./setup install\n```\n\nRead the [usage guide](https://shadow.github.io/docs/guide) or get started with some [example simulations](https://shadow.github.io/docs/guide/getting_started_basic.html).\n\n\u003c!--- ANCHOR: body (for mdbook) --\u003e\n\n## What is Shadow?\n\nShadow is a discrete-event network simulator that directly executes real\napplication code, enabling you to simulate distributed systems with thousands of\nnetwork-connected processes in **realistic** and **scalable** private network\nexperiments using your laptop, desktop, or server running Linux.\n\nShadow experiments can be scientifically **controlled** and deterministically\n**replicated**, making it easier for you to reproduce bugs and eliminate\nconfounding factors in your experiments.\n\n## How Does Shadow Work?\n\nShadow directly executes **real applications**:\n\n- Shadow directly executes unmodified, real application code using native OS\n  (Linux) processes.\n- Shadow co-opts the native processes into a discrete-event simulation by\n  interposing at the system call API.\n- The necessary system calls are emulated such that the applications need not\n  be aware that they are running in a Shadow simulation.\n\nShadow connects the applications in a **simulated network**:\n\n- Shadow constructs a private, virtual network through which the managed\n  processes can communicate.\n- Shadow internally implements simulated versions of common network protocols\n  (e.g., TCP and UDP).\n- Shadow internally models network routing characteristics (e.g., path latency\n  and packet loss) using a configurable network graph.\n\n## Why is Shadow Needed?\n\nNetwork emulators (e.g., [mininet](http://mininet.org)) run real application\ncode on top of real OS kernels in real time, but are non-determinsitic and have\nlimited scalability: time distortion can occur if emulated processes exceed an\nunknown computational threshold, leading to undefined behavior.\n\nNetwork simulators (e.g., [ns-3](https://www.nsnam.org)) offer more experimental\ncontrol and scalability, but have limited application-layer realism because they\nrun application abstractions in place of real application code.\n\nShadow offers a novel, hybrid emulation/simulation architecture: it directly\nexecutes real applications as native OS processes in order to faithfully\nreproduce application-layer behavior while also co-opting the processes into a\nhigh-performance network simulation that can scale to large distributed systems\nwith hundreds of thousands of processes.\n\n## Caveats\n\nShadow implements **over 150 functions from the system call API**, but does not\nyet fully support all API features. Although applications that make _basic_ use\nof the supported system calls should work out of the box, those that use more\n_complex_ features or functions may not yet function correctly when running in\nShadow. Extending support for the API is a work-in-progress.\n\nThat being said, we are particularly motivated to run large-scale [Tor\nNetwork](https://www.torproject.org) simulations. This use-case is already\nfairly well-supported and we are eager to continue extending support for it.\n\n## More Information\n\nHomepage:\n- \u003chttps://shadow.github.io\u003e\n\nDocumentation:\n- [User documentation](https://shadow.github.io/docs/guide)\n- [Developer documentation](https://shadow.github.io/docs/rust)\n\nCommunity Support:\n- \u003chttps://github.com/shadow/shadow/discussions\u003e\n\nBug Reports:\n- \u003chttps://github.com/shadow/shadow/issues\u003e\n\n\u003c!--- ANCHOR_END: body (for mdbook) --\u003e\n","funding_links":[],"categories":["Rust","simulation","Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshadow%2Fshadow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshadow%2Fshadow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshadow%2Fshadow/lists"}