{"id":16087487,"url":"https://github.com/linqlover/simulationstudio","last_synced_at":"2026-01-31T13:46:18.054Z","repository":{"id":40400292,"uuid":"344896343","full_name":"LinqLover/SimulationStudio","owner":"LinqLover","description":"A growing suite of applications and tools using code simulation in Squeak/Smalltalk","archived":false,"fork":false,"pushed_at":"2026-01-19T23:07:26.000Z","size":568,"stargazers_count":10,"open_issues_count":15,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-20T06:13:05.074Z","etag":null,"topics":["code-simulation","interpreter","isolation","meta-interpreter","sandbox","simulation","smalltalk","squeak"],"latest_commit_sha":null,"homepage":"","language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LinqLover.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-03-05T18:15:50.000Z","updated_at":"2026-01-19T23:07:30.000Z","dependencies_parsed_at":"2023-12-31T00:34:12.765Z","dependency_job_id":"15df1cc1-fde8-49ab-a17b-abd8266d5af8","html_url":"https://github.com/LinqLover/SimulationStudio","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/LinqLover/SimulationStudio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinqLover%2FSimulationStudio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinqLover%2FSimulationStudio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinqLover%2FSimulationStudio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinqLover%2FSimulationStudio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LinqLover","download_url":"https://codeload.github.com/LinqLover/SimulationStudio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinqLover%2FSimulationStudio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28944789,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T13:02:32.153Z","status":"ssl_error","status_checked_at":"2026-01-31T13:00:07.528Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["code-simulation","interpreter","isolation","meta-interpreter","sandbox","simulation","smalltalk","squeak"],"created_at":"2024-10-09T13:29:53.320Z","updated_at":"2026-01-31T13:46:18.049Z","avatar_url":"https://github.com/LinqLover.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SimulationStudio\n\n[![smalltalkCI](https://github.com/LinqLover/SimulationStudio/actions/workflows/main.yml/badge.svg)](https://github.com/LinqLover/SimulationStudio/actions/workflows/main.yml)\n[![Coverage Status](https://coveralls.io/repos/github/LinqLover/SimulationStudio/badge.svg)](https://coveralls.io/github/LinqLover/SimulationStudio)\n\nA growing suite of applications and tools using code simulation in [Squeak/Smalltalk](https://squeak.org).\n\nCode simulation is a technique in Squeak that reproduces the original VM interpreter for Smalltalk in the userland (i.e., implements it in itself), making the exploration and manipulation of its implementation much more immediate and enjoyable.\nThe foundation of this project is to extend the default code simulator with the ability to *control* and *modify* the execution.\nFor instance, we can disallow certain instructions, implement virtualization features by redirecting memory accesses, or trace the entire execution of a program (similar to bytecode instrumentation).\nAs one example, SimulationStudio implements a sandbox that can safely execute any code isolated from the remaining VM image.\nOn top of the sandbox, this repository also provides several tools that use *speculative code execution* to offer new ways for exploring objects and classes based on their behavior.\n\nFor usage instructions, see the [installation](#installation) section below.\n\n## Included packages\n\n### `SimulationStudio-Base`\n\nProvides abstract functionality for simulating stack frames by subclassing `SimulationContext` or `Simulator`.\n\n### `SimulationStudio-Sandbox`\n\nExecute Smalltalk code in an isolated environment without applying any side effects to the image.\n\n```smalltalk\narray := {1. 2. 3}.\n\nSandbox evaluate:\n\t[array at: 1 put: 10.\n\tarray first]. \"10\"\n\narray first. \"1\"\n```\n\n### `SimulationStudio-Support`:\n\nContains several simulation goodies and examples:\n\n- the `BenchmarkSimulator` for hardware-independent benchmark creation\n- the `CoverageSimulator` for bytecode-precise code coverage analysis\n- the `LimitSimulator` for hardware-independent calculation timeouts\n\n### `SimulationStudio-Tools`\n\nContains some programming tools that are implementation using simulation:\n\n- the `SimulationMethodFinder` which searches for all methods that convert a given set of inputs into a given output by speculatively executing all methods ([screenshots](https://github.com/LinqLover/SimulationStudio/pull/61#issue-1379779606))\n  \n  [![Simulation Method Finder (recursive search)](https://user-images.githubusercontent.com/38782922/191326674-447447aa-f00c-4937-892d-3d060ed688e2.png)](https://github.com/LinqLover/SimulationStudio/pull/61#issue-1379779606)\n\n- the `SimulationProtocolExplorer` which inspects an object and its protocol together with a speculatively evaluated preview of each message ([screenshots](https://github.com/LinqLover/SimulationStudio/pull/39#issue-1090737789))\n\n  [![Protocol Explorer on `DateAndTime now`](https://user-images.githubusercontent.com/38782922/162335500-9ab37f20-d5e5-499a-98ed-a1aa25bad5ed.png)](https://github.com/LinqLover/SimulationStudio/pull/39#issue-1090737789)\n\n- the `CoverageSimulator` also offers a GUI for browsing the branch coverage of methods:\n\n  [![`CoverageSimulator browseFor: [HtmlReadWriterTest suite debug] inClasses: {HtmlReadWriter. String. Text}`](https://user-images.githubusercontent.com/38782922/239919032-1145f08b-5f8f-47f2-8c81-ee470a7d01a0.png)](https://github.com/LinqLover/SimulationStudio/commit/6bcd9c070145609ff779ae251f16a2adce2c1282#commitcomment-114429989)\n\n### `SimulationStudio-Tracing` (experimental)\n\nRecord and browse fine-granular stack traces. Integrates the [MessageSendRecorder](https://github.com/hpi-swa/MessageSendRecorder).\n\n---\n\nCheck out the relevant classes for more details and usage instructions!\n\nFor more technical details, also read these announcement threads on the squeak-dev mailing list:\n\n- [[ANN] SimulationStudio and sandboxed execution for Squeak](http://forum.world.st/ANN-SimulationStudio-and-sandboxed-execution-for-Squeak-td5127804.html)\n- [News from SimulationStudio](http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-November/216964.html)\n- [[ANN] News from SimulationStudio: Method Finder 2](https://lists.squeakfoundation.org/pipermail/squeak-dev/2022-September/222244.html)\n\nThere is also a slide deck about the Sandbox and the Simulation Method Finder (German, translation will be provided upon request):\n**[Finden statt Suchen: Der Method-Finder wird abgesichert](https://linqlover.github.io/LinqLover/slides/SqueakEv22%20MethodFinder2-de.pdf) (Don't Search, Find: Securing the MethodFinder). On [*Squeak Meeting 2022*](https://squeak.de/news/2022/10/21/squeak_treffen/), November 19, 2022. Squeak e.V., Potsdam, Germany.**\n\n## Installation\n\n### ... as a precompiled bundle *(recommended for most visitors)*\n\nDownload the archived bundle from the [latest release](https://github.com/LinqLover/SimulationStudio/releases/tag/squeak61alpha-20230328-0018) and follow the instructions to open it. In the image, you will find further usage examples. Using the bundle is also the recommended way to browse the sources of the project.\n\n### ... using [Metacello](https://github.com/Metacello/metacello)\n\nFor the [latest Squeak Trunk](https://files.squeak.org/trunk/):\n\n```smalltalk\nMetacello new\n\tbaseline: 'SimulationStudio';\n\tgithubUser: 'LinqLover' project: 'SimulationStudio' path: 'packages';\n\tget;\n\tload.\n```\n\nLTS (long-time support) version for an [older Squeak release](https://squeak.org/downloads/#:~:text=History):\n\n```smalltalk\nMetacello new\n\tbaseline: 'SimulationStudio';\n\tgithubUser: 'LinqLover' project: 'SimulationStudio' commitish: 'squeak60' path: 'packages';\n\tget;\n\tload.\n```\n\n- Currently supported LTS versions are: `squeak60`\n\nTo load a specific package, change the last line, e.g., `load: 'SimulationStudio-Base'`. See the [Metacello docs](https://github.com/Metacello/metacello/blob/master/docs/MetacelloScriptingAPI.md#load-options) for more options.\n\n### ... as a dependency in your [Metacello baseline](https://github.com/dalehenrich/metacello-work/blob/master/docs/GettingStartedWithGitHub.md#create-baseline)\n\nFor the [latest Squeak Trunk](https://files.squeak.org/trunk/):\n\n```smalltalk\nspec baseline: 'SimulationStudio' with: [\n\tspec\n\t\trepository: 'github://LinqLover/SimulationStudio/packages';\n\t\tloads: 'SimulationStudio-Sandbox'].\n```\n\nLTS (long-time support) version for an [older Squeak release](https://squeak.org/downloads/#:~:text=History):\n\n```smalltalk\nspec baseline: 'SimulationStudio' with: [\n\tspec\n\t\trepository: 'github://LinqLover/SimulationStudio:squeak60/packages';\n\t\tloads: 'SimulationStudio-Sandbox'].\n```\n\n- Currently supported LTS versions are: `squeak60`\n\nDepending on your needs, specify any other package(s) via `loads:`. See the [Metacello docs](https://github.com/Metacello/metacello/blob/master/docs/APIReference.md) for more options.\n\n### ... using [Squot](https://github.com/hpi-swa/Squot)\n\nOpen a git browser, clone the repository, and check out the latest commit from the default branch or any LTS branch.\n[Learn more](https://github.com/hpi-swa/Squot#getting-started-with-an-existing-remote-project) about using the git browser.\n\n## Users of SimulationStudio\n\nAs of today, the following projects are known make use of SimulationStudio:\n\n- [TelegramSmalltalkBot](https://github.com/LinqLover/TelegramSmalltalkBot)\n- [TraceDebugger](https://github.com/hpi-swa-lab/squeak-tracedebugger)\n- [Sandblocks](https://github.com/hpi-swa/sandblocks)\n- [SemanticSqueak](https://github.com/hpi-swa-lab/SemanticSqueak)\n- [OOPSIE](https://github.dev/hpi-swa-teaching/osvm-oopsie)\n\n## Contribution and bug reports\n\n... are very welcome! Please feel free to submit bug reports, discuss design changes, or propose new extensions!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinqlover%2Fsimulationstudio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinqlover%2Fsimulationstudio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinqlover%2Fsimulationstudio/lists"}