You just use the Java standard library to do everything, and the Java runtime handles keeping them namespaced. At some point (right around the dot-com crash) everyone switched away from Java (because Python was free) and that resulted in using POSIX to do everything. No more namespacing. Then people wanted to scale, and, viola! Docker.