diff --git a/.github/workflows/compile_openjdk.yml b/.github/workflows/compile_openjdk.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8a2f7819af4f794efd19a749ffa7864adb768adb
--- /dev/null
+++ b/.github/workflows/compile_openjdk.yml
@@ -0,0 +1,34 @@
+name: Compile OpenJDK with jdk-macos-legacy patches
+
+on:
+    push:
+        branches:
+        - master
+    pull_request:
+        branches:
+        - master
+
+jobs:
+    build:
+        name: Build OpenJDK versions
+        runs-on: macos-latest
+
+        steps:
+        - name: Checkout
+          uses: actions/checkout@v4
+
+        - name: Clone OpenJDK
+          run: |
+                git clone https://github.com/openjdk/jdk17u.git --depth 1 --branch jdk-17.0.12+2
+                cd jdk17u
+
+        - name: Apply patches
+          run: |
+                git apply ../jdk-macos-legacy/patches/17/10.8.patch
+                git apply ../jdk-macos-legacy/patches/17/awtwindow.patch
+                git apply ../jdk-macos-legacy/patches/17/remove_disconnectx.patch
+                git apply ../jdk-macos-legacy/patches/17/remove_metal_backend.patch
+
+        - name: Run patch scripts
+          run: |
+                    bash ../jdk-macos-legacy/patches/17/remove_metal_backend.sh .
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..496ee2ca6a2f08396a4076fe43dedf3dc0da8b6d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
\ No newline at end of file
diff --git a/README.md b/README.md
index 3ebd6cd4e6204ce9206790be98efeac5a7b92dcc..b67ee8c65938d741d900248d9ecafdcd3ec1a732 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ Builds of the OpenJDK are compiled from release tags on a regular basis. These b
 2. Apply the patch files (located in the patches/`version number` folders) to the OpenJDK source code for the version you want to build
 3. Run any shell scripts in the patches/`version number` folder. All scripts have the following syntax:
 ```shell
-./script.sh /path/to/openjdk/source
+./script.sh /path/to/openjdk/source/folder
 ```
 4. Follow the build instructions for OpenJDK
 
diff --git a/patches/17/10.8.patch b/patches/17/10.8.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d117688776a68222a197549c753acd755af21ea3
--- /dev/null
+++ b/patches/17/10.8.patch
@@ -0,0 +1,26 @@
+diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4
+index 1dbcbe05ed6..9ee8990b118 100644
+--- a/make/autoconf/flags.m4
++++ b/make/autoconf/flags.m4
+@@ -136,7 +136,7 @@ AC_DEFUN([FLAGS_SETUP_MACOSX_VERSION],
+     if test "x$OPENJDK_TARGET_CPU_ARCH" = xaarch64; then
+       MACOSX_VERSION_MIN=11.00.00
+     else
+-      MACOSX_VERSION_MIN=10.12.0
++      MACOSX_VERSION_MIN=10.8.0
+     fi
+     MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./}
+
+diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js
+index 4ee43abe774..a1492ea80f9 100644
+--- a/make/conf/jib-profiles.js
++++ b/make/conf/jib-profiles.js
+@@ -446,7 +446,7 @@ var getJibProfilesProfiles = function (input, common, data) {
+             target_cpu: "x64",
+             dependencies: ["devkit", "gtest", "pandoc"],
+             configure_args: concat(common.configure_args_64bit, "--with-zlib=system",
+-                "--with-macosx-version-max=10.12.00",
++                "--with-macosx-version-max=10.8.00",
+                 "--enable-compatible-cds-alignment",
+                 // Use system SetFile instead of the one in the devkit as the
+                 // devkit one may not work on Catalina.
diff --git a/patches/17/awtwindow.patch b/patches/17/awtwindow.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ca43a62510ebf0e5e611c8a1f2cc173c41786d30
--- /dev/null
+++ b/patches/17/awtwindow.patch
@@ -0,0 +1,21 @@
+diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m
+index 150e82c6965..965760b3646 100644
+--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m
++++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m
+@@ -1104,10 +1104,12 @@ + (AWTWindow *) lastKeyWindow {
+ {
+     JNI_COCOA_ENTER(env);
+     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
+-        if (allowAutomaticTabbing) {
+-            [NSWindow setAllowsAutomaticWindowTabbing:YES];
+-        } else {
+-            [NSWindow setAllowsAutomaticWindowTabbing:NO];
++        if ([NSWindow respondsToSelector:@selector(setAllowsAutomaticWindowTabbing:)]) {
++            if (allowAutomaticTabbing) {
++                [NSWindow setAllowsAutomaticWindowTabbing:YES];
++            } else {
++                [NSWindow setAllowsAutomaticWindowTabbing:NO];
++            }
+         }
+     }];
+     JNI_COCOA_EXIT(env);
diff --git a/patches/17/remove_disconnectx.patch b/patches/17/remove_disconnectx.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2ea950e70d8d84b6229fc7d9f4eeba1f025d3992
--- /dev/null
+++ b/patches/17/remove_disconnectx.patch
@@ -0,0 +1,42 @@
+diff --git a/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c b/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c
+index 902a816419d..553126950fa 100644
+--- a/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c
++++ b/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c
+@@ -50,28 +50,21 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jclass clazz,
+     jint fd = fdval(env, fdo);
+     int rv;
+ 
+-#if defined(__APPLE__)
+-    // On macOS systems we use disconnectx
+-    rv = disconnectx(fd, SAE_ASSOCID_ANY, SAE_CONNID_ANY);
+-#else
++
+     SOCKETADDRESS sa;
+-    memset(&sa, 0, sizeof(sa));
+-    #if defined(_ALLBSD_SOURCE)
+-        sa.sa.sa_family = isIPv6 ? AF_INET6 : AF_INET;
+-    #else
+-        sa.sa.sa_family = AF_UNSPEC;
+-    #endif
+     socklen_t len = isIPv6 ? sizeof(struct sockaddr_in6) :
+                              sizeof(struct sockaddr_in);
++
++    memset(&sa, 0, sizeof(sa));
++#if defined(_ALLBSD_SOURCE)
++    sa.sa.sa_family = isIPv6 ? AF_INET6 : AF_INET;
++#else
++    sa.sa.sa_family = AF_UNSPEC;
++#endif
+     rv = connect(fd, &sa.sa, len);
+ #endif
+ 
+-#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__)
+-    // On _ALLBSD_SOURCE except __APPLE__ we consider EADDRNOTAVAIL
+-    // error to be OK and ignore it. __APPLE__ systems are excluded
+-    // in this check since for __APPLE__ systems, unlike other BSD systems,
+-    // we issue a "disconnectx" call (a few lines above),
+-    // which isn't expected to return this error code.
++#if defined(_ALLBSD_SOURCE)
+     if (rv < 0 && errno == EADDRNOTAVAIL)
+         rv = errno = 0;
+ #elif defined(_AIX)
diff --git a/patches/17/remove_metal_backend.patch b/patches/17/remove_metal_backend.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d5560e2ba52655144e928bd7dbef204cccbe26f7
--- /dev/null
+++ b/patches/17/remove_metal_backend.patch
@@ -0,0 +1,129 @@
+diff --git a/make/modules/java.desktop/lib/Awt2dLibraries.gmk b/make/modules/java.desktop/lib/Awt2dLibraries.gmk
+index 3bbff03638b..1acf6528992 100644
+--- a/make/modules/java.desktop/lib/Awt2dLibraries.gmk
++++ b/make/modules/java.desktop/lib/Awt2dLibraries.gmk
+@@ -161,7 +161,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
+     LIBS_macosx := -lmlib_image \
+         -framework Cocoa \
+         -framework OpenGL \
+-        -framework Metal \
+         -framework JavaRuntimeSupport \
+         -framework ApplicationServices \
+         -framework AudioToolbox, \
+@@ -736,8 +735,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
+         -framework ApplicationServices \
+         -framework Foundation \
+         -framework Security \
+-        -framework Cocoa \
+-        -framework Metal
++        -framework Cocoa
+   else ifeq ($(call isTargetOs, windows), true)
+     LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
+   else
+@@ -798,7 +796,6 @@ ifeq ($(call isTargetOs, macosx), true)
+       libawt_lwawt/awt \
+       libawt_lwawt/font \
+       libawt_lwawt/java2d/opengl \
+-      libawt_lwawt/java2d/metal \
+       include \
+       common/awt/debug \
+       common/java2d/opengl \
+@@ -834,7 +831,6 @@ ifeq ($(call isTargetOs, macosx), true)
+           -framework AudioToolbox \
+           -framework Carbon \
+           -framework Cocoa \
+-          -framework Metal \
+           -framework Security \
+           -framework ExceptionHandling \
+           -framework JavaRuntimeSupport \
+@@ -870,31 +866,6 @@ else
+ endif
+ 
+ ifeq ($(call isTargetOs, macosx), true)
+-  SHADERS_SRC := $(TOPDIR)/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal
+-  SHADERS_SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/native/java.desktop/libosxui
+-  SHADERS_AIR := $(SHADERS_SUPPORT_DIR)/shaders.air
+-  SHADERS_LIB := $(INSTALL_LIBRARIES_HERE)/shaders.metallib
+-
+-  $(eval $(call SetupExecute, metal_shaders, \
+-      INFO := Running metal on $(notdir $(SHADERS_SRC)) (for libosxui.dylib), \
+-      DEPS := $(SHADERS_SRC), \
+-      OUTPUT_FILE := $(SHADERS_AIR), \
+-      SUPPORT_DIR := $(SHADERS_SUPPORT_DIR), \
+-      COMMAND := $(METAL) -c -std=osx-metal2.0 \
+-          -mmacosx-version-min=$(MACOSX_METAL_VERSION_MIN) \
+-          -o $(SHADERS_AIR) $(SHADERS_SRC), \
+-  ))
+-
+-  $(eval $(call SetupExecute, metallib_shaders, \
+-      INFO := Running metallib on $(notdir $(SHADERS_AIR)) (for libosxui.dylib), \
+-      DEPS := $(SHADERS_AIR), \
+-      OUTPUT_FILE := $(SHADERS_LIB), \
+-      SUPPORT_DIR := $(SHADERS_SUPPORT_DIR), \
+-      COMMAND := $(METALLIB) -o $(SHADERS_LIB) $(SHADERS_AIR), \
+-  ))
+-
+-  TARGETS += $(SHADERS_LIB)
+-
+   $(eval $(call SetupJdkLibrary, BUILD_LIBOSXUI, \
+       NAME := osxui, \
+       OPTIMIZATION := LOW, \
+@@ -909,7 +880,6 @@ ifeq ($(call isTargetOs, macosx), true)
+           -L$(INSTALL_LIBRARIES_HERE), \
+       LIBS := -lawt -losxapp -lawt_lwawt \
+           -framework Cocoa \
+-          -framework Metal \
+           -framework Carbon \
+           -framework ApplicationServices \
+           -framework JavaRuntimeSupport \
+@@ -917,7 +887,6 @@ ifeq ($(call isTargetOs, macosx), true)
+   ))
+ 
+   TARGETS += $(BUILD_LIBOSXUI)
+-  $(BUILD_LIBOSXUI): $(SHADERS_LIB)
+ 
+   $(BUILD_LIBOSXUI): $(BUILD_LIBAWT)
+ 
+diff --git a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java
+index 64117b8999e..301b1dbee1f 100644
+--- a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java
++++ b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java
+@@ -89,7 +89,6 @@ public final class MTLGraphicsConfig extends CGraphicsConfig
+     private final Object disposerReferent = new Object();
+     private final int maxTextureSize;
+ 
+-    private static native boolean isMetalFrameworkAvailable();
+     private static native boolean tryLoadMetalLibrary(int displayID, String shaderLib);
+     private static native long getMTLConfigInfo(int displayID, String mtlShadersLib);
+ 
+@@ -100,7 +99,7 @@ public final class MTLGraphicsConfig extends CGraphicsConfig
+     private static native int nativeGetMaxTextureSize();
+ 
+     static {
+-        mtlAvailable = isMetalFrameworkAvailable();
++        mtlAvailable = false;
+     }
+ 
+     private MTLGraphicsConfig(CGraphicsDevice device,
+diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m
+index 1cc4abfaaad..2af0689c044 100644
+--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m
++++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m
+@@ -29,7 +29,6 @@
+ #import "JNIUtilities.h"
+ 
+ #import <QuartzCore/CATransaction.h>
+-#import <QuartzCore/CAMetalLayer.h>
+ 
+ @implementation AWTSurfaceLayers
+ 
+@@ -71,8 +70,7 @@ - (void) setLayer:(CALayer *)newLayer {
+ // Updates back buffer size of the layer if it's an OpenGL/Metal layer
+ // including all OpenGL/Metal sublayers
+ + (void) repaintLayersRecursively:(CALayer*)aLayer {
+-    if ([aLayer isKindOfClass:[CAOpenGLLayer class]] ||
+-        [aLayer isKindOfClass:[CAMetalLayer class]]) {
++    if ([aLayer isKindOfClass:[CAOpenGLLayer class]]) {
+         [aLayer setNeedsDisplay];
+     }
+     for(CALayer *child in aLayer.sublayers) {
diff --git a/patches/17/remove_metal_backend.sh b/patches/17/remove_metal_backend.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9416a2ea2c15e52810017b5024b7b8da18ffe617
--- /dev/null
+++ b/patches/17/remove_metal_backend.sh
@@ -0,0 +1,15 @@
+# syntax: [remove-metal-backend.sh] [path-to-openjdk-repo]
+
+if [ $# -ne 1 ]; then
+    echo "Usage: remove-metal-backend.sh [path-to-openjdk-repo]"
+    exit 1
+fi
+
+REPO_PATH=$1
+
+if [ ! -d $REPO_PATH ]; then
+    echo "Error: $REPO_PATH is not a directory"
+    exit 1
+fi
+
+rm -rf $REPO_PATH/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal
\ No newline at end of file