Write out the dynamic OS choice, to avoid exec statements.
Adding support for a new OS is now a bit more work, but I bet that
'dos' or 'nt' will cover most situations...
diff --git a/Lib/os.py b/Lib/os.py
index 51e8a67..7f9e696 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -6,7 +6,8 @@
 # - os.name is either 'posix' or 'mac'
 # - os.curdir is a string representing the current directory ('.' or ':')
 # - os.pardir is a string representing the parent directory ('..' or '::')
-# - os.sep is the (or a most common) pathname separator ('/' or ':')
+# - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
+# - os.altsep is the alternatte pathname separator (None or '/')
 # - os.pathsep is the component separator used in $PATH etc
 # - os.defpath is the default search path for executables
 
@@ -16,39 +17,71 @@
 # and opendir), and leave all pathname manipulation to os.path
 # (e.g., split and join).
 
-_osindex = {
-	  'posix': ('.', '..', '/', ':', ':/bin:/usr/bin'),
-	  'dos':   ('.', '..', '\\', ';', '.;C:\\bin'),
-	  'nt':    ('.', '..', '\\', ';', '.;C:\\bin'),
-	  'mac':   (':', '::', ':', '\n', ':'),
-}
-
-# For freeze.py script:
-if 0:
-	import posix
-	import posixpath
-
 import sys
-for name in _osindex.keys():
-	if name in sys.builtin_module_names:
-		curdir, pardir, sep, pathsep, defpath = _osindex[name]
-		exec 'from %s import *' % name
-		exec 'import %spath' % name
-		exec 'path = %spath' % name
-		exec 'del %spath' % name
-		try:
-			exec 'from %s import _exit' % name
-		except ImportError:
-			pass
-		try:
-			environ
-		except:
-			environ = {} # Make sure os.environ exists, at least
-		break
+
+_names = sys.builtin_module_names
+
+altsep = None
+
+if 'posix' in _names:
+	name = 'posix'
+	curdir = '.'; pardir = '..'; sep = '/'; pathsep = ':'
+	defpath = ':/bin:/usr/bin'
+	from posix import *
+	try:
+		from posix import _exit
+	except ImportError:
+		pass
+	import posixpath
+	path = posixpath
+	del posixpath
+elif 'nt' in _names:
+	name = 'nt'
+	curdir = '.'; pardir = '..'; sep = '\\'; pathsep = ';'
+	defpath = '.;C:\\bin'
+	from nt import *
+	try:
+		from nt import _exit
+	except ImportError:
+		pass
+	import ntpath
+	path = ntpath
+	del ntpath
+elif 'dos' in _names:
+	name = 'dos'
+	curdir = '.'; pardir = '..'; sep = '\\'; pathsep = ';'
+	defpath = '.;C:\\bin'
+	from dos import *
+	try:
+		from dos import _exit
+	except ImportError:
+		pass
+	import dospath
+	path = dospath
+	del dospath
+elif 'mac' in _names:
+	name = 'mac'
+	curdir = ':'; pardir = '::'; sep = ':'; pathsep = '\n'
+	defpath = ':'
+	from mac import *
+	try:
+		from mac import _exit
+	except ImportError:
+		pass
+	import macpath
+	path = macpath
+	del macpath
 else:
-	del name
 	raise ImportError, 'no os specific module found'
 
+del _names
+
+# Make sure os.environ exists, at least
+try:
+	environ
+except NameError:
+	environ = {}
+
 def execl(file, *args):
 	execv(file, args)
 
@@ -104,31 +137,13 @@
 				exc, arg = error, (errno, msg)
 	raise exc, arg
 
-# Provide listdir for Windows NT that doesn't have it built in
-if name == 'nt':
-	try:
-		_tmp = listdir
-		del _tmp
-	except NameError:
-		def listdir(name):
-			if path.ismount(name):
-				list = ['.']
-			else:
-				list = ['.', '..']
-			f = popen('dir/l/b ' + name, 'r')
-			line = f.readline()
-			while line:
-				list.append(line[:-1])
-				line = f.readline()
-			return list
-
-
 # Change environ to automatically call putenv() if it exists
 try:
-	_putenv = putenv
+	# This will fail if there's no putenv
+	putenv
 except NameError:
-	_putenv = None
-if _putenv:
+	pass
+else:
 	import UserDict
 
 	class _Environ(UserDict.UserDict):