Where would you draw the line?
When making an abstract system, it is really important to find where you need to stop. Let's say you are making a web-based gallery app, but you want it to use a file system bundled together. Sure, you embed a virtual filesystem inside the app. Then, let's say you need to set a video as a wallpaper, but your operating system doesn't allow this from a website. What would you do? If you kept continuing the method you adopted earlier, you would end up with a web desktop where you can set your wallpaper - just with one catch, it's virtual and is bundled with your app. Soon you start to realize, if you follow this path, anything feels simulatable. Maybe a few steps later, you would simulate transistors, a full computer, a room, maybe a house - perhaps? Or you can go in deep, introspecting on the details of the system you got, which is when your app gets simplified - so much so that the app is essentially a transparent layer to the system you already run. Here, a gallery app ...