diff --git a/Lib/glob.py b/Lib/glob.py
new file mode 100644
index 0000000..8a70f0e
--- /dev/null
+++ b/Lib/glob.py
@@ -0,0 +1,44 @@
+# Module 'glob' -- filename globbing.
+
+import posix
+import path
+import fnmatch
+
+def glob(pathname):
+	if not has_magic(pathname): return [pathname]
+	dirname, basename = path.split(pathname)
+	if dirname[-1:] = '/' and dirname <> '/':
+		dirname = dirname[:-1]
+	if has_magic(dirname):
+		list = glob(dirname)
+	else:
+		list = [dirname]
+	if not has_magic(basename):
+		result = []
+		for dirname in list:
+			if basename or path.isdir(dirname):
+				name = path.cat(dirname, basename)
+				if path.exists(name):
+					result.append(name)
+	else:
+		result = []
+		for dirname in list:
+			sublist = glob1(dirname, basename)
+			for name in sublist:
+				result.append(path.cat(dirname, name))
+	return result
+
+def glob1(dirname, pattern):
+	if not dirname: dirname = '.'
+	try:
+		names = posix.listdir(dirname)
+	except posix.error:
+		return []
+	result = []
+	for name in names:
+		if name[0] <> '.' or pattern[0] = '.':
+			if fnmatch.fnmatch(name, pattern): result.append(name)
+	return result
+
+def has_magic(s):
+	return '*' in s or '?' in s or '[' in s
