It might not seem obvious why projects have to run in a workspace on an ESP server, but quite simply it provides a namespace. You can’t run two instances of the same project, with the same name, in the same workspace (other than as an HA pair) – otherwise the streams/windows of the project wouldn’t have unique identifiers. How would you connect to one or the other?
Workspaces provide a protected namespace. Project names only have to be unique within the workspace. The full combination of server/workspace/project can then uniquely identify a project. So you can run two instances of the same project in two different workspaces. Or users can each have their own workspace and not have to worry about name conflicts with other users.