diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index 5fc5bbf..23e1e10 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -584,20 +584,6 @@
   public boolean incompatibleUseCcConfigureFromRulesCc;
 
   @Option(
-      name = "incompatible_restrict_named_params",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
-      effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
-      metadataTags = {
-        OptionMetadataTag.INCOMPATIBLE_CHANGE,
-        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
-      },
-      help =
-          "If set to true, restricts a number of Starlark built-in function parameters to be "
-              + "only specifiable positionally (and not by keyword).")
-  public boolean incompatibleRestrictNamedParams;
-
-  @Option(
       name = "incompatible_depset_for_libraries_to_link_getter",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
@@ -705,7 +691,6 @@
             .incompatibleNoRuleOutputsParam(incompatibleNoRuleOutputsParam)
             .incompatibleNoSupportToolsInActionInputs(incompatibleNoSupportToolsInActionInputs)
             .incompatibleNoTargetOutputGroup(incompatibleNoTargetOutputGroup)
-            .incompatibleRestrictNamedParams(incompatibleRestrictNamedParams)
             .incompatibleRunShellCommandString(incompatibleRunShellCommandString)
             .incompatibleVisibilityPrivateAttributesAtDefinition(
                 incompatibleVisibilityPrivateAttributesAtDefinition)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java b/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
index a6be014..c0c8c65 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
@@ -85,8 +85,7 @@
         type,
         generic,
         noneable,
-        param.named()
-            || (param.legacyNamed() && !starlarkSemantics.incompatibleRestrictNamedParams()),
+        param.named(),
         param.positional(),
         getType(type, generic, param.allowedTypes(), noneable),
         disabledByFlag);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index a69bf73..c1a375e 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -269,8 +269,6 @@
 
   public abstract boolean incompatibleNoTargetOutputGroup();
 
-  public abstract boolean incompatibleRestrictNamedParams();
-
   public abstract boolean incompatibleRunShellCommandString();
 
   public abstract boolean incompatibleVisibilityPrivateAttributesAtDefinition();
@@ -362,7 +360,6 @@
           .incompatibleNoSupportToolsInActionInputs(true)
           .incompatibleNoTargetOutputGroup(true)
           .incompatibleRunShellCommandString(false)
-          .incompatibleRestrictNamedParams(true)
           .incompatibleVisibilityPrivateAttributesAtDefinition(false)
           .internalSkylarkFlagTestCanary(false)
           .incompatibleDoNotSplitLinkingCmdline(true)
@@ -446,8 +443,6 @@
 
     public abstract Builder incompatibleNoTargetOutputGroup(boolean value);
 
-    public abstract Builder incompatibleRestrictNamedParams(boolean value);
-
     public abstract Builder incompatibleRunShellCommandString(boolean value);
 
     public abstract Builder incompatibleVisibilityPrivateAttributesAtDefinition(boolean value);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index d3d2e05..7011d0927 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -158,7 +158,6 @@
         "--incompatible_no_rule_outputs_param=" + rand.nextBoolean(),
         "--incompatible_no_support_tools_in_action_inputs=" + rand.nextBoolean(),
         "--incompatible_no_target_output_group=" + rand.nextBoolean(),
-        "--incompatible_restrict_named_params=" + rand.nextBoolean(),
         "--incompatible_run_shell_command_string=" + rand.nextBoolean(),
         "--incompatible_visibility_private_attributes_at_definition=" + rand.nextBoolean(),
         "--incompatible_require_linker_input_cc_api=" + rand.nextBoolean(),
@@ -213,7 +212,6 @@
         .incompatibleNoRuleOutputsParam(rand.nextBoolean())
         .incompatibleNoSupportToolsInActionInputs(rand.nextBoolean())
         .incompatibleNoTargetOutputGroup(rand.nextBoolean())
-        .incompatibleRestrictNamedParams(rand.nextBoolean())
         .incompatibleRunShellCommandString(rand.nextBoolean())
         .incompatibleVisibilityPrivateAttributesAtDefinition(rand.nextBoolean())
         .incompatibleRequireLinkerInputCcApi(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index e180595..428a7b1 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -690,50 +690,9 @@
         .testExpression("tuple({1: 'foo', 2: 'bar'}) == (1, 2)", true);
   }
 
-  // Verifies some legacy functionality that should be deprecated and removed via
-  // an incompatible-change flag: parameters in MethodLibrary functions may be specified by
-  // keyword, or may be None, even in places where it does not quite make sense.
   @Test
-  public void testLegacyNamed() throws Exception {
-    new Scenario("--incompatible_restrict_named_params=false")
-        // Parameters which may be specified by keyword but are not explicitly 'named'.
-        .testExpression("all(elements=[True, True])", Boolean.TRUE)
-        .testExpression("any(elements=[True, False])", Boolean.TRUE)
-        .testEval("sorted(iterable=[3, 0, 2], key=None, reverse=False)", "[0, 2, 3]")
-        .testEval("reversed(sequence=[3, 2, 0])", "[0, 2, 3]")
-        .testEval("tuple(x=[1, 2])", "(1, 2)")
-        .testEval("list(x=(1, 2))", "[1, 2]")
-        .testEval("len(x=(1, 2))", "2")
-        .testEval("str(x=(1, 2))", "'(1, 2)'")
-        .testEval("repr(x=(1, 2))", "'(1, 2)'")
-        .testExpression("bool(x=3)", Boolean.TRUE)
-        .testEval("int(x=3)", "3")
-        .testEval("dict(args=[(1, 2)])", "{1 : 2}")
-        .testExpression("bool(x=3)", Boolean.TRUE)
-        .testEval("enumerate(list=[40, 41])", "[(0, 40), (1, 41)]")
-        .testExpression("hash(value='hello')", "hello".hashCode())
-        .testEval("range(start_or_stop=3, stop_or_none=9, step=2)", "range(3, 9, 2)")
-        .testExpression("hasattr(x=depset(), name='to_list')", Boolean.TRUE)
-        .testExpression("bool(x=3)", Boolean.TRUE)
-        .testExpression("getattr(x='hello', name='cnt', default='default')", "default")
-        .testEval(
-            "dir(x={})",
-            "[\"clear\", \"get\", \"items\", \"keys\","
-                + " \"pop\", \"popitem\", \"setdefault\", \"update\", \"values\"]")
-        .testEval("type(x=5)", "'int'")
-        .testEval("str(depset(items=[0,1]))", "'depset([0, 1])'")
-        .testIfErrorContains("hello", "fail(msg='hello', attr='someattr')")
-        // Parameters which may be None but are not explicitly 'noneable'
-        .testExpression("hasattr(x=None, name='to_list')", Boolean.FALSE)
-        .testEval("getattr(x=None, name='count', default=None)", "None")
-        .testEval("dir(None)", "[]")
-        .testIfErrorContains("None", "fail(msg=None)")
-        .testEval("type(None)", "'NoneType'");
-  }
-
-  @Test
-  public void testExperimentalStarlarkConfig() throws Exception {
-    new Scenario("--incompatible_restrict_named_params")
+  public void testPositionalOnlyArgument() throws Exception {
+    new Scenario()
         .testIfErrorContains(
             "join() got named argument for positional-only parameter 'elements'",
             "','.join(elements=['foo', 'bar'])");
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 403fbce..e53dcea 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -1093,32 +1093,6 @@
         .testLookup("b", "with_params(1, true, false, true, false, a)");
   }
 
-  @Test
-  public void testLegacyNamed() throws Exception {
-    new Scenario("--incompatible_restrict_named_params=false")
-        .update("mock", new Mock())
-        .setUp("b = mock.legacy_method(True, legacyNamed=True, named=True)")
-        .testLookup("b", "legacy_method(true, true, true)");
-
-    new Scenario("--incompatible_restrict_named_params=false")
-        .update("mock", new Mock())
-        .setUp("b = mock.legacy_method(True, True, named=True)")
-        .testLookup("b", "legacy_method(true, true, true)");
-
-    // Verify legacyNamed also works with proxy method objects.
-    new Scenario("--incompatible_restrict_named_params=false")
-        .update("mock", new Mock())
-        .setUp(
-            "m = mock.proxy_methods_object()",
-            "b = m.legacy_method(True, legacyNamed=True, named=True)")
-        .testLookup("b", "legacy_method(true, true, true)");
-
-    new Scenario("--incompatible_restrict_named_params=false")
-        .update("mock", new Mock())
-        .setUp("m = mock.proxy_methods_object()", "b = m.legacy_method(True, True, named=True)")
-        .testLookup("b", "legacy_method(true, true, true)");
-  }
-
   /**
    * This test verifies an error is raised when a method parameter is set both positionally and
    * by name.
