diff --git a/Include/pyport.h b/Include/pyport.h
index 085833f..5b0e590 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -389,13 +389,6 @@
 
 /* From Modules/posixmodule.c */
 extern int fdatasync(int);
-/* XXX These are supposedly for SunOS4.1.3 but "shouldn't hurt elsewhere" */
-extern int rename(const char *, const char *);
-extern int pclose(FILE *);
-extern int lstat(const char *, struct stat *);
-extern int symlink(const char *, const char *);
-extern int fsync(int fd);
-
 #endif /* 0 */
 
 
diff --git a/Misc/BeOS-setup.py b/Misc/BeOS-setup.py
index 53b62b7..438daa7 100644
--- a/Misc/BeOS-setup.py
+++ b/Misc/BeOS-setup.py
@@ -401,10 +401,6 @@
 
         # Curses support, requring the System V version of curses, often
         # provided by the ncurses library.
-        if platform == 'sunos4':
-            inc_dirs += ['/usr/5include']
-            lib_dirs += ['/usr/5lib']
-
         if (self.compiler.find_library_file(lib_dirs, 'ncurses')):
             curses_libs = ['ncurses']
             exts.append( Extension('_curses', ['_cursesmodule.c'],
diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index 3ca6dab..51442c9 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -361,8 +361,7 @@
 
 # Curses support, requring the System V version of curses, often
 # provided by the ncurses library.  e.g. on Linux, link with -lncurses
-# instead of -lcurses; on SunOS 4.1.3, insert -I/usr/5include
-# -L/usr/5lib before -lcurses).
+# instead of -lcurses).
 #
 # First, look at Setup.config; configure may have set this for you.
 
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index a61a37a..6cb4717 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -39,11 +39,6 @@
 #include <sys/mman.h>
 #include <sys/stat.h>
 
-#ifndef MS_SYNC
-/* This is missing e.g. on SunOS 4.1.4 */
-#define MS_SYNC 0
-#endif
-
 #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
 static int
 my_getpagesize(void)
diff --git a/Modules/pcre-int.h b/Modules/pcre-int.h
index ceae8eb..d07d536 100644
--- a/Modules/pcre-int.h
+++ b/Modules/pcre-int.h
@@ -35,14 +35,6 @@
 modules, but which are not relevant to the outside. */
 
 
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if USE_BCOPY is defined. */
-
-#ifdef USE_BCOPY
-#undef  memmove        /* some systems may have a macro */
-#define memmove(a, b, c) bcopy(b, a, c)
-#endif
- 
 /* Standard C headers plus the external interface definition */
 
 #include <ctype.h>
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index aa9f36c..71a102c 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -136,16 +136,6 @@
 
 #ifndef _MSC_VER
 
-#if defined(sun) && !defined(__SVR4)
-/* SunOS 4.1.4 doesn't have prototypes for these: */
-extern int rename(const char *, const char *);
-extern int pclose(FILE *);
-extern int fclose(FILE *);
-extern int fsync(int);
-extern int lstat(const char *, struct stat *);
-extern int symlink(const char *, const char *);
-#endif
-
 #if defined(__sgi)&&_COMPILER_VERSION>=700
 /* declare ctermid_r if compiling with MIPSPro 7.x in ANSI C mode
    (default) */
@@ -2117,11 +2107,7 @@
 	}
 	argvlist[argc] = NULL;
 
-#ifdef BAD_EXEC_PROTOTYPES
-	execv(path, (const char **) argvlist);
-#else /* BAD_EXEC_PROTOTYPES */
 	execv(path, argvlist);
-#endif /* BAD_EXEC_PROTOTYPES */
 
 	/* If we get here it's definitely an error */
 
@@ -2260,12 +2246,7 @@
 	}
 	envlist[envc] = 0;
 
-
-#ifdef BAD_EXEC_PROTOTYPES
-	execve(path, (const char **)argvlist, envlist);
-#else /* BAD_EXEC_PROTOTYPES */
 	execve(path, argvlist, envlist);
-#endif /* BAD_EXEC_PROTOTYPES */
 
 	/* If we get here it's definitely an error */
 
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 66461a8..7476ac7 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -13,16 +13,6 @@
 extern double pow(double, double);
 #endif
 
-#if defined(sun) && !defined(__SVR4)
-/* On SunOS4.1 only libm.a exists. Make sure that references to all
-   needed math functions exist in the executable, so that dynamic
-   loading of mathmodule does not fail. */
-double (*_Py_math_funcs_hack[])() = {
-	acos, asin, atan, atan2, ceil, cos, cosh, exp, fabs, floor,
-	fmod, log, log10, pow, sin, sinh, sqrt, tan, tanh
-};
-#endif
-
 /* Special free list -- see comments for same code in intobject.c. */
 #define BLOCK_SIZE	1000	/* 1K less typical malloc overhead */
 #define BHEAD_SIZE	8	/* Enough for a 64-bit pointer */
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 4bfcdbd..e8b65c7 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -348,10 +348,6 @@
 /* Define if the closedir function returns void instead of int.  */
 /* #undef VOID_CLOSEDIR */
 
-/* Define if your <unistd.h> contains bad prototypes for exec*()
-   (as it does on SGI IRIX 4.x) */
-/* #undef BAD_EXEC_PROTOTYPES */
-
 /* Define if getpgrp() must be called as getpgrp(0)
    and (consequently) setpgrp() as setpgrp(0, 0). */
 /* #undef GETPGRP_HAVE_ARGS */
diff --git a/RISCOS/pyconfig.h b/RISCOS/pyconfig.h
index fbd8ebc..bb221e2 100644
--- a/RISCOS/pyconfig.h
+++ b/RISCOS/pyconfig.h
@@ -67,10 +67,6 @@
    and you want support for AIX C++ shared extension modules. */
 #undef AIX_GENUINE_CPLUSPLUS
 
-/* Define if your <unistd.h> contains bad prototypes for exec*()
-   (as it does on SGI IRIX 4.x) */
-#undef BAD_EXEC_PROTOTYPES
-
 /* Define if your compiler botches static forward declarations
    (as it does on SCI ODT 3.0) */
 #undef BAD_STATIC_FORWARD
diff --git a/configure.in b/configure.in
index 31805c1..c4b60f7 100644
--- a/configure.in
+++ b/configure.in
@@ -332,7 +332,7 @@
 
 # Check for unsupported systems
 case $ac_sys_system/$ac_sys_release in
-SunOS/4*|Linux*/1*)
+Linux*/1*)
    echo This system \($ac_sys_system/$ac_sys_release\) is no longer supported.
    echo See README for details.
    exit 1;;
@@ -1221,7 +1221,7 @@
 fi
 AC_MSG_RESULT($SO)
 # LDSHARED is the ld *command* used to create shared library
-# -- "ld" on SunOS 4.x.x, "cc -G" on SunOS 5.x, "ld -shared" on IRIX 5
+# -- "cc -G" on SunOS 5.x, "ld -shared" on IRIX 5
 # (Shared libraries in this instance are shared modules to be loaded into
 # Python, as opposed to building Python itself as a shared library.)
 AC_MSG_CHECKING(LDSHARED)
@@ -1238,7 +1238,6 @@
 		;;
 	IRIX/5*) LDSHARED="ld -shared";;
 	IRIX*/6*) LDSHARED="ld ${SGI_ABI} -shared -all";;
-	SunOS/4*) LDSHARED="ld";;
 	SunOS/5*) 
 		if test "$GCC" = "yes"
 		then LDSHARED='$(CC) -shared'
@@ -2426,18 +2425,6 @@
 ])
 AC_MSG_RESULT($works)
 
-if test "$have_prototypes" = yes; then
-bad_prototypes=no
-AC_MSG_CHECKING(for bad exec* prototypes)
-AC_TRY_COMPILE([#include <unistd.h>], [char **t;execve("@",t,t);], ,
-    AC_DEFINE(BAD_EXEC_PROTOTYPES, 1,
-    [Define if your <unistd.h> contains bad prototypes for exec*()
-    (as it does on SGI IRIX 4.x)]) 
-    bad_prototypes=yes
-)
-AC_MSG_RESULT($bad_prototypes)
-fi
-
 # check if sockaddr has sa_len member
 AC_MSG_CHECKING(if sockaddr has sa_len member)
 AC_TRY_COMPILE([#include <sys/types.h>
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 41de4e1..e1c432f 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -12,10 +12,6 @@
 /* Define this if you have AtheOS threads. */
 #undef ATHEOS_THREADS
 
-/* Define if your <unistd.h> contains bad prototypes for exec*() (as it does
-   on SGI IRIX 4.x) */
-#undef BAD_EXEC_PROTOTYPES
-
 /* Define this if you have BeOS threads. */
 #undef BEOS_THREADS
 
