diff -ru Python-3.6.1/configure Python-3.6.1-new/configure
--- Python-3.6.1/configure	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/configure	2017-07-03 15:26:44.804152125 -0700
@@ -3256,6 +3256,9 @@
 	*-*-cygwin*)
 		ac_sys_system=Cygwin
 		;;
+	*-*-redox*)
+		ac_sys_system=Redox
+		;;
 	*)
 		# for now, limit cross builds to known configurations
 		MACHDEP="unknown"
@@ -3302,9 +3305,7 @@
 		_host_cpu=
 		;;
 	*)
-		# for now, limit cross builds to known configurations
-		MACHDEP="unknown"
-		as_fn_error $? "cross build not supported for $host" "$LINENO" 5
+		_host_cpu=$host_cpu
 	esac
 	_PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}"
 fi
@@ -11343,7 +11344,6 @@
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
 
-$as_echo "#define HAVE_FCHDIR 1" >>confdefs.h
 
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -11393,7 +11393,6 @@
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
 
-$as_echo "#define HAVE_FDATASYNC 1" >>confdefs.h
 
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -12093,7 +12092,6 @@
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
 
-$as_echo "#define HAVE_SETGROUPS 1" >>confdefs.h
 
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -12491,8 +12489,8 @@
 $as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
 if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
 
-        LIBS="$LIBS -lrt"
         $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+        LIBS="$LIBS -lrt"
 
 
 $as_echo "#define TIMEMODULE_LIB rt" >>confdefs.h
@@ -12510,7 +12508,6 @@
   ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
 if test "x$ac_cv_func_clock_getres" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_CLOCK_GETRES 1
 _ACEOF
 
 else
@@ -12553,7 +12550,6 @@
 $as_echo "$ac_cv_lib_rt_clock_getres" >&6; }
 if test "x$ac_cv_lib_rt_clock_getres" = xyes; then :
 
-        $as_echo "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
 
 
 fi
diff -ru Python-3.6.1/Lib/posixpath.py Python-3.6.1-new/Lib/posixpath.py
--- Python-3.6.1/Lib/posixpath.py	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Lib/posixpath.py	2017-07-04 13:28:08.034693302 -0700
@@ -165,11 +165,7 @@
 
 def islink(path):
     """Test whether a path is a symbolic link"""
-    try:
-        st = os.lstat(path)
-    except (OSError, AttributeError):
-        return False
-    return stat.S_ISLNK(st.st_mode)
+    return False
 
 # Being true for dangling symbolic links is also useful.
 
diff -ru Python-3.6.1/Modules/clinic/posixmodule.c.h Python-3.6.1-new/Modules/clinic/posixmodule.c.h
--- Python-3.6.1/Modules/clinic/posixmodule.c.h	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Modules/clinic/posixmodule.c.h	2017-07-03 14:47:11.991792352 -0700
@@ -519,7 +519,7 @@
 
 #endif /* defined(HAVE_LCHFLAGS) */
 
-#if defined(HAVE_CHROOT)
+#if 0
 
 PyDoc_STRVAR(os_chroot__doc__,
 "chroot($module, /, path)\n"
diff -ru Python-3.6.1/Modules/faulthandler.c Python-3.6.1-new/Modules/faulthandler.c
--- Python-3.6.1/Modules/faulthandler.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Modules/faulthandler.c	2017-07-03 14:39:30.321353882 -0700
@@ -906,7 +906,7 @@
     SetErrorMode(mode | SEM_NOGPFAULTERRORBOX);
 #endif
 
-#ifdef HAVE_SYS_RESOURCE_H
+#if 0
     struct rlimit rl;
 
     /* Disable creation of core dump */
diff -ru Python-3.6.1/Modules/_io/fileio.c Python-3.6.1-new/Modules/_io/fileio.c
--- Python-3.6.1/Modules/_io/fileio.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Modules/_io/fileio.c	2017-07-04 13:13:07.963211923 -0700
@@ -457,7 +457,7 @@
         }
     }
     else {
-#if defined(S_ISDIR) && defined(EISDIR)
+#if 0
         /* On Unix, open will succeed for directories.
            In Python, there should be no file objects referring to
            directories, so we need a check.  */
@@ -467,7 +467,7 @@
             goto error;
         }
 #endif /* defined(S_ISDIR) */
-#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+#if 0
         if (fdfstat.st_blksize > 1)
             self->blksize = fdfstat.st_blksize;
 #endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
diff -ru Python-3.6.1/Modules/posixmodule.c Python-3.6.1-new/Modules/posixmodule.c
--- Python-3.6.1/Modules/posixmodule.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Modules/posixmodule.c	2017-07-03 15:31:13.753481813 -0700
@@ -188,7 +188,6 @@
 #define HAVE_PIPE       1
 #define HAVE_SYSTEM     1
 #define HAVE_WAIT       1
-#define HAVE_TTYNAME    1
 #endif  /* _MSC_VER */
 #endif  /* ! __WATCOMC__ || __QNX__ */
 
@@ -2940,7 +2939,7 @@
 #endif /* HAVE_LCHFLAGS */
 
 
-#ifdef HAVE_CHROOT
+#if 0
 /*[clinic input]
 os.chroot
     path: path_t
@@ -5563,8 +5562,6 @@
 os_sched_yield_impl(PyObject *module)
 /*[clinic end generated code: output=902323500f222cac input=e54d6f98189391d4]*/
 {
-    if (sched_yield())
-        return posix_error();
     Py_RETURN_NONE;
 }
 
@@ -11804,7 +11801,7 @@
                  (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2));
         if (!is_dot) {
             entry = DirEntry_from_posix_info(&iterator->path, direntp->d_name,
-                                            name_len, direntp->d_ino
+                                            name_len, 0
 #ifdef HAVE_DIRENT_D_TYPE
                                             , direntp->d_type
 #endif
diff -ru Python-3.6.1/Modules/timemodule.c Python-3.6.1-new/Modules/timemodule.c
--- Python-3.6.1/Modules/timemodule.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Modules/timemodule.c	2017-07-03 14:41:43.868293016 -0700
@@ -966,7 +966,7 @@
     return PyFloat_FromDouble(total * 1e-7);
 #else
 
-#if defined(HAVE_SYS_RESOURCE_H)
+#if 0
     struct rusage ru;
 #endif
 #ifdef HAVE_TIMES
@@ -1000,7 +1000,7 @@
     }
 #endif
 
-#if defined(HAVE_SYS_RESOURCE_H)
+#if 0
     if (getrusage(RUSAGE_SELF, &ru) == 0) {
         double total;
         total = ru.ru_utime.tv_sec + ru.ru_utime.tv_usec * 1e-6;
@@ -1195,7 +1195,7 @@
 
     And I'm lazy and hate C so nyer.
      */
-#if defined(HAVE_TZNAME) && !defined(__GLIBC__) && !defined(__CYGWIN__)
+#if 0
     PyObject *otz0, *otz1;
     tzset();
     PyModule_AddIntConstant(m, "timezone", timezone);
diff -ru Python-3.6.1/Python/pylifecycle.c Python-3.6.1-new/Python/pylifecycle.c
--- Python-3.6.1/Python/pylifecycle.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Python/pylifecycle.c	2017-07-04 09:28:10.863071915 -0700
@@ -998,7 +998,7 @@
 #else
     if (Py_FileSystemDefaultEncoding == NULL)
     {
-        Py_FileSystemDefaultEncoding = get_locale_encoding();
+        Py_FileSystemDefaultEncoding = "utf-8";
         if (Py_FileSystemDefaultEncoding == NULL)
             Py_FatalError("Py_Initialize: Unable to get the locale encoding");
 
diff -ru Python-3.6.1/Python/pytime.c Python-3.6.1-new/Python/pytime.c
--- Python-3.6.1/Python/pytime.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Python/pytime.c	2017-07-03 15:29:14.832184973 -0700
@@ -578,9 +578,6 @@
         info->implementation = "clock_gettime(CLOCK_REALTIME)";
         info->monotonic = 0;
         info->adjustable = 1;
-        if (clock_getres(CLOCK_REALTIME, &res) == 0)
-            info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
-        else
             info->resolution = 1e-9;
     }
 #else   /* HAVE_CLOCK_GETTIME */
@@ -714,15 +711,10 @@
     }
 
     if (info) {
-        struct timespec res;
         info->monotonic = 1;
         info->implementation = implementation;
         info->adjustable = 0;
-        if (clock_getres(clk_id, &res) != 0) {
-            PyErr_SetFromErrno(PyExc_OSError);
-            return -1;
-        }
-        info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+        info->resolution = 1e-5;
     }
     if (_PyTime_FromTimespec(tp, &ts, raise) < 0)
         return -1;
diff -ru Python-3.6.1/Python/random.c Python-3.6.1-new/Python/random.c
--- Python-3.6.1/Python/random.c	2017-03-20 23:32:38.000000000 -0700
+++ Python-3.6.1-new/Python/random.c	2017-07-03 16:07:31.740783648 -0700
@@ -79,7 +79,7 @@
 
 #else /* !MS_WINDOWS */
 
-#if defined(HAVE_GETRANDOM) || defined(HAVE_GETRANDOM_SYSCALL)
+#if 0
 #define PY_GETRANDOM 1
 
 /* Call getrandom() to get random bytes:
@@ -316,7 +316,7 @@
         if (urandom_cache.fd >= 0)
             fd = urandom_cache.fd;
         else {
-            fd = _Py_open("/dev/urandom", O_RDONLY);
+            fd = _Py_open("rand:", O_RDONLY);
             if (fd < 0) {
                 if (errno == ENOENT || errno == ENXIO ||
                     errno == ENODEV || errno == EACCES) {
@@ -361,7 +361,7 @@
         } while (0 < size);
     }
     else {
-        fd = _Py_open_noraise("/dev/urandom", O_RDONLY);
+        fd = _Py_open_noraise("rand:", O_RDONLY);
         if (fd < 0) {
             return -1;
         }