diff --git a/.arc-linters/arcanist-external-json-linter b/.arc-linters/arcanist-external-json-linter
deleted file mode 160000
index 957f9e4e8eb422dcb72f02f07767a1ed5969baab..0000000000000000000000000000000000000000
--- a/.arc-linters/arcanist-external-json-linter
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 957f9e4e8eb422dcb72f02f07767a1ed5969baab
diff --git a/.arc-linters/check-binaries.py b/.arc-linters/check-binaries.py
deleted file mode 100755
index 017b89bff0917aff1b7ca07a56aff89f43cec7e0..0000000000000000000000000000000000000000
--- a/.arc-linters/check-binaries.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python3
-
-# A linter to warn when binary files are added to the repository
-
-import sys
-import os
-import json
-
-path = sys.argv[1]
-warnings = []
-if os.path.isfile(path):
-    with open(path, 'rb') as f:
-        if b'\0' in f.read(8000):
-            warning = {
-                'severity': 'warning',
-                'message': 'This file appears to be a binary file; does it really belong in the repository?'
-            }
-            warnings.append(warning)
-
-print(json.dumps(warnings))
diff --git a/.arc-linters/check-cpp.py b/.arc-linters/check-cpp.py
deleted file mode 100755
index a442e261db797f0429bc24f2cda7dab1797d839b..0000000000000000000000000000000000000000
--- a/.arc-linters/check-cpp.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python3
-
-# A linter to warn for ASSERT macros which are separated from their argument
-# list by a space, which Clang's CPP barfs on
-
-import sys
-import logging
-import os
-import re
-import json
-
-def setup_logging(logger):
-    """
-    ``arc lint`` makes it quite tricky to catch debug output from linters.
-    Log to a file to work around this.
-    """
-    hdlr = logging.FileHandler('linter.log', 'w')
-    logger.addHandler(hdlr)
-    logger.setLevel(logging.DEBUG)
-    return logger
-
-logger = logging.getLogger()
-#setup_logging(logger)
-logger.debug(sys.argv)
-
-def add_warning(severity, message, line):
-    entry = {
-        'severity': severity,
-        'message': message,
-        'line': line
-    }
-    warnings.append(entry)
-
-class Linter(object):
-    def __init__(self):
-        self.warnings = []
-
-    def add_warning(self, **entry):
-        self.warnings.append(entry)
-
-    def lint(self, path):
-        pass
-
-class LineLinter(Linter):
-    def lint(self, path):
-        if os.path.isfile(path):
-            with open(path, 'rb') as f:
-                for lineno, line in enumerate(f):
-                    self.lint_line(lineno+1, line)
-
-    def lint_line(self, lineno, line):
-        pass
-
-class RegexpLinter(LineLinter):
-    def __init__(self, regex, **warning):
-        LineLinter.__init__(self)
-        self.re = re.compile(regex)
-        self.warning = warning
-
-    def lint_line(self, lineno, line):
-        if self.re.search(line):
-            warning = {
-                'line': lineno,
-            }
-            warning.update(self.warning)
-            self.add_warning(**warning)
-
-linters = [
-    RegexpLinter(br'ASSERT\s+\(',
-                 message='CPP macros should not have a space between the macro name and their argument list'),
-    RegexpLinter(br'#ifdef\s+',
-                 message='`#if defined(x)` is preferred to `#ifdef x`',
-                 severity='warning'),
-    RegexpLinter(br'#if\s+defined\s+',
-                 message='`#if defined(x)` is preferred to `#if defined x`',
-                 severity='warning'),
-    RegexpLinter(br'#ifndef\s+',
-                 message='`#if !defined(x)` is preferred to `#ifndef x`',
-                 severity='warning'),
-]
-
-if __name__ == '__main__':
-    path = sys.argv[1]
-    for linter in linters:
-        linter.lint(path)
-
-    warnings = [warning
-                for linter in linters
-                for warning in linter.warnings]
-    logger.debug(warnings)
-    print(json.dumps(warnings))
diff --git a/.arc-linters/check-makefiles.py b/.arc-linters/check-makefiles.py
deleted file mode 100644
index 4778b2d51a6c56f47ab05c4f5c29294b741c0076..0000000000000000000000000000000000000000
--- a/.arc-linters/check-makefiles.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-
-# Warn for use of `--interactive` inside Makefiles (#11468).
-#
-# Encourage the use of `$(TEST_HC_OPTS_INTERACTIVE)` instead of
-# `$(TEST_HC_OPTS) --interactive -ignore-dot-ghci -v0`. It's too easy to
-# forget one of those flags when adding a new test.
-
-import sys
-import os
-import json
-import re
-
-path = sys.argv[1]
-warnings = []
-if os.path.isfile(path):
-    with open(path) as f:
-        for lineno, line in enumerate(f):
-            if '--interactive' in line:
-                warning = {
-                    'severity': 'warning',
-                    'message': 'Use `$(TEST_HC_OPTS_INTERACTIVE)` instead of `--interactive -ignore-dot-ghci -v0`',
-                    'line': lineno+1,
-                }
-                warnings.append(warning)
-
-print(json.dumps(warnings))
diff --git a/.arcconfig b/.arcconfig
deleted file mode 100644
index 29021b3108559cc58e641417c6ec86efc70a2d46..0000000000000000000000000000000000000000
--- a/.arcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "project.name"        : "ghc",
-  "repository.callsign" : "GHC",
-  "phabricator.uri"     : "https://phabricator.haskell.org",
-  "base"                : "git:merge-base(origin/master), arc:prompt",
-
-  "load": [
-    ".arc-linters/arcanist-external-json-linter"
-  ]
-}
diff --git a/.arclint b/.arclint
deleted file mode 100644
index 95355e28987add70915c21144145b6fdb932e2fe..0000000000000000000000000000000000000000
--- a/.arclint
+++ /dev/null
@@ -1,125 +0,0 @@
-{
-  "linters": {
-    "filename": {
-      "type": "filename"
-    },
-    "generated": {
-      "type": "generated"
-    },
-    "merge-conflict": {
-      "type": "merge-conflict",
-      "exclude": "(\\.rst$)"
-    },
-    "nolint": {
-      "type": "nolint"
-    },
-    "haskell": {
-      "type": "text",
-      "include": ["(\\.(l?hs(-boot)?|x|y\\.pp)(\\.in)?$)"],
-      "severity": {
-        "5": "disabled",
-        "2": "warning"
-      }
-    },
-    "c": {
-      "type": "text",
-      "include": ["(\\.(c|h)(\\.in)?$)"],
-      "severity": {
-        "2": "warning"
-      }
-    },
-    "text-xml": {
-      "type": "text",
-      "include": "(\\.xml$)",
-      "severity": {
-        "5": "disabled",
-        "3": "disabled",
-        "2": "warning"
-      }
-    },
-    "shell": {
-      "type": "text",
-      "include": [ "(\\.sh$)" ],
-      "text.max-line-length": 200,
-      "severity": {
-        "2": "warning"
-      }
-    },
-    "makefiles": {
-      "type": "text",
-      "include": [ "(Makefile$)", "(\\.mk$)" ],
-      "text.max-line-length": 400,
-      "severity": {
-        "2": "disabled"
-      }
-    },
-    "cabal": {
-      "type": "text",
-      "include": ["(\\.cabal(\\.in)?$)"],
-      "severity": {
-        "5": "disabled",
-        "2": "warning"
-      }
-    },
-    "other-text": {
-      "type": "text",
-      "include": ["(.travis.yml?)", "(.md$)", "(.txt$)"],
-      "severity": {
-        "5": "disabled",
-        "2": "warning"
-      }
-    },
-    "check-binaries": {
-      "type": "external-json",
-      "external-json.script": "python3 .arc-linters/check-binaries.py"
-    },
-    "check-makefiles": {
-      "type": "external-json",
-      "include": ["(Makefile$)"],
-      "external-json.script": "python3 .arc-linters/check-makefiles.py"
-    },
-    "bad-assert-clang-cpp": {
-      "type": "external-json",
-      "include": ["(\\.(l?hs|x|y\\.pp)(\\.in)?$)", "(\\.(c|h)$)"],
-      "external-json.script": "python3 .arc-linters/check-cpp.py"
-    }
-  },
-
-  "exclude":
-    [ "(^libffi-tarballs)",
-      "(^libraries/binary)",
-      "(^libraries/bytestring)",
-      "(^libraries/Cabal)",
-      "(^libraries/containers)",
-      "(^libraries/haskeline)",
-      "(^libraries/pretty)",
-      "(^libraries/terminfo)",
-      "(^libraries/transformers)",
-      "(^libraries/xhtml)",
-      "(^libraries/Win32)",
-      "(^libraries/primitive)",
-      "(^libraries/vector)",
-      "(^libraries/time)",
-      "(^libraries/random)",
-      "(^libraries/array)",
-      "(^libraries/deepseq)",
-      "(^libraries/directory)",
-      "(^libraries/filepath)",
-      "(^libraries/haskell98)",
-      "(^libraries/haskell2010)",
-      "(^libraries/hoopl)",
-      "(^libraries/hpc)",
-      "(^libraries/old-locale)",
-      "(^libraries/old-time)",
-      "(^libraries/process)",
-      "(^libraries/unix)",
-      "(^libraries/parallel)",
-      "(^libraries/stm)",
-      "(^libraries/dph)",
-      "(^utils/haddock)",
-      "(^nofib)",
-      "(^utils/hsc2hs)",
-      "(^libffi-tarballs)",
-      "(^ghc-tarballs)"
-    ]
-}
diff --git a/.gitmodules b/.gitmodules
index 5700a96a228746003b3736dd8599a95a28b2045a..4de91b60f12ed0a6629af72c57fdd1c41755deeb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -107,6 +107,3 @@
 [submodule "gmp-tarballs"]
 	path = libraries/integer-gmp/gmp/gmp-tarballs
 	url = ../gmp-tarballs.git
-[submodule ".arc-linters/arcanist-external-json-linter"]
-	path = .arc-linters/arcanist-external-json-linter
-	url = ../arcanist-external-json-linter.git