diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
index 91305aa7..e895d07 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
@@ -680,7 +680,6 @@
 
   @Override
   public Descriptor outputAttribute(
-      Object defaultValue, // Label | StarlarkFunction
       String doc,
       Boolean mandatory,
       StarlarkThread thread)
@@ -688,16 +687,12 @@
     BazelStarlarkContext.from(thread).checkLoadingOrWorkspacePhase("attr.output");
 
     return createNonconfigurableAttrDescriptor(
-        "output",
-        optionMap(DEFAULT_ARG, defaultValue, MANDATORY_ARG, mandatory),
-        BuildType.OUTPUT,
-        thread);
+        "output", optionMap(MANDATORY_ARG, mandatory), BuildType.OUTPUT, thread);
   }
 
   @Override
   public Descriptor outputListAttribute(
       Boolean allowEmpty,
-      Object defaultValue, // Sequence | StarlarkFunction
       String doc,
       Boolean mandatory,
       Boolean nonEmpty,
@@ -708,8 +703,6 @@
     return createAttrDescriptor(
         "output_list",
         optionMap(
-            DEFAULT_ARG,
-            defaultValue,
             MANDATORY_ARG,
             mandatory,
             NON_EMPTY_ARG,
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 a540379..dfb5139 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
@@ -483,20 +483,6 @@
   public boolean incompatibleNoImplicitFileExport;
 
   @Option(
-      name = "incompatible_no_output_attr_default",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
-      effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
-      metadataTags = {
-        OptionMetadataTag.INCOMPATIBLE_CHANGE,
-        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
-      },
-      help =
-          "If set to true, disables the `default` parameter of the `attr.output` and "
-              + "`attr.output_list` attribute definition functions.")
-  public boolean incompatibleNoOutputAttrDefault;
-
-  @Option(
       name = "incompatible_no_rule_outputs_param",
       defaultValue = "false",
       documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
@@ -704,7 +690,6 @@
             .incompatibleNewActionsApi(incompatibleNewActionsApi)
             .incompatibleNoAttrLicense(incompatibleNoAttrLicense)
             .incompatibleNoImplicitFileExport(incompatibleNoImplicitFileExport)
-            .incompatibleNoOutputAttrDefault(incompatibleNoOutputAttrDefault)
             .incompatibleNoRuleOutputsParam(incompatibleNoRuleOutputsParam)
             .incompatibleNoSupportToolsInActionInputs(incompatibleNoSupportToolsInActionInputs)
             .incompatibleNoTargetOutputGroup(incompatibleNoTargetOutputGroup)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkAttrApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkAttrApi.java
index 24f39a6..dca25cb 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkAttrApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkAttrApi.java
@@ -728,19 +728,6 @@
       doc = "Creates a schema for an output (label) attribute." + OUTPUT_ATTR_TEXT,
       parameters = {
         @Param(
-            name = DEFAULT_ARG,
-            allowedTypes = {
-              @ParamType(type = Label.class),
-              @ParamType(type = StarlarkFunction.class)
-            },
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT,
-            valueWhenDisabled = "None",
-            doc = DEFAULT_DOC),
-        @Param(
             name = DOC_ARG,
             type = String.class,
             defaultValue = "''",
@@ -756,8 +743,7 @@
             doc = MANDATORY_DOC)
       },
       useStarlarkThread = true)
-  Descriptor outputAttribute(
-      Object defaultValue, String doc, Boolean mandatory, StarlarkThread thread)
+  Descriptor outputAttribute(String doc, Boolean mandatory, StarlarkThread thread)
       throws EvalException;
 
   @SkylarkCallable(
@@ -771,19 +757,6 @@
             doc = ALLOW_EMPTY_DOC,
             named = true),
         @Param(
-            name = DEFAULT_ARG,
-            allowedTypes = {
-              @ParamType(type = Sequence.class, generic1 = Label.class),
-              @ParamType(type = StarlarkFunction.class)
-            },
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT,
-            valueWhenDisabled = "None",
-            doc = DEFAULT_DOC),
-        @Param(
             name = DOC_ARG,
             type = String.class,
             defaultValue = "''",
@@ -808,7 +781,6 @@
       useStarlarkThread = true)
   Descriptor outputListAttribute(
       Boolean allowEmpty,
-      Object defaultValue,
       String doc,
       Boolean mandatory,
       Boolean nonEmpty,
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 28c7dd7..41ef0d7 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
@@ -74,8 +74,6 @@
         "incompatible_applicable_licenses";
     public static final String INCOMPATIBLE_DISABLE_DEPSET_INPUTS =
         "incompatible_disable_depset_inputs";
-    public static final String INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT =
-        "incompatible_no_output_attr_default";
     public static final String INCOMPATIBLE_NO_RULE_OUTPUTS_PARAM =
         "incompatible_no_rule_outputs_param";
     public static final String INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP =
@@ -127,8 +125,6 @@
         return incompatibleApplicableLicenses();
       case FlagIdentifier.INCOMPATIBLE_DISABLE_DEPSET_INPUTS:
         return incompatibleDisableDepsetItems();
-      case FlagIdentifier.INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT:
-        return incompatibleNoOutputAttrDefault();
       case FlagIdentifier.INCOMPATIBLE_NO_RULE_OUTPUTS_PARAM:
         return incompatibleNoRuleOutputsParam();
       case FlagIdentifier.INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP:
@@ -240,8 +236,6 @@
 
   public abstract boolean incompatibleNoImplicitFileExport();
 
-  public abstract boolean incompatibleNoOutputAttrDefault();
-
   public abstract boolean incompatibleNoRuleOutputsParam();
 
   public abstract boolean incompatibleNoSupportToolsInActionInputs();
@@ -336,7 +330,6 @@
           .incompatibleNewActionsApi(true)
           .incompatibleNoAttrLicense(true)
           .incompatibleNoImplicitFileExport(false)
-          .incompatibleNoOutputAttrDefault(true)
           .incompatibleNoRuleOutputsParam(false)
           .incompatibleNoSupportToolsInActionInputs(true)
           .incompatibleNoTargetOutputGroup(true)
@@ -417,8 +410,6 @@
 
     public abstract Builder incompatibleNoImplicitFileExport(boolean value);
 
-    public abstract Builder incompatibleNoOutputAttrDefault(boolean value);
-
     public abstract Builder incompatibleNoRuleOutputsParam(boolean value);
 
     public abstract Builder incompatibleNoSupportToolsInActionInputs(boolean value);
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAttrApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAttrApi.java
index e999b13..762c1fe 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAttrApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAttrApi.java
@@ -166,22 +166,20 @@
   }
 
   @Override
-  public Descriptor outputAttribute(
-      Object defaultO, String doc, Boolean mandatory, StarlarkThread thread) throws EvalException {
-    return new FakeDescriptor(AttributeType.OUTPUT, doc, mandatory, ImmutableList.of(), defaultO);
+  public Descriptor outputAttribute(String doc, Boolean mandatory, StarlarkThread thread)
+      throws EvalException {
+    return new FakeDescriptor(AttributeType.OUTPUT, doc, mandatory, ImmutableList.of(), "");
   }
 
   @Override
   public Descriptor outputListAttribute(
       Boolean allowEmpty,
-      Object defaultList,
       String doc,
       Boolean mandatory,
       Boolean nonEmpty,
       StarlarkThread thread)
       throws EvalException {
-    return new FakeDescriptor(
-        AttributeType.OUTPUT_LIST, doc, mandatory, ImmutableList.of(), defaultList);
+    return new FakeDescriptor(AttributeType.OUTPUT_LIST, doc, mandatory, ImmutableList.of(), "");
   }
 
   @Override
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 e80bf34..6a183e8 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
@@ -154,7 +154,6 @@
         "--incompatible_new_actions_api=" + rand.nextBoolean(),
         "--incompatible_no_attr_license=" + rand.nextBoolean(),
         "--incompatible_no_implicit_file_export=" + rand.nextBoolean(),
-        "--incompatible_no_output_attr_default=" + rand.nextBoolean(),
         "--incompatible_no_rule_outputs_param=" + rand.nextBoolean(),
         "--incompatible_no_support_tools_in_action_inputs=" + rand.nextBoolean(),
         "--incompatible_no_target_output_group=" + rand.nextBoolean(),
@@ -209,7 +208,6 @@
         .incompatibleNewActionsApi(rand.nextBoolean())
         .incompatibleNoAttrLicense(rand.nextBoolean())
         .incompatibleNoImplicitFileExport(rand.nextBoolean())
-        .incompatibleNoOutputAttrDefault(rand.nextBoolean())
         .incompatibleNoRuleOutputsParam(rand.nextBoolean())
         .incompatibleNoSupportToolsInActionInputs(rand.nextBoolean())
         .incompatibleNoTargetOutputGroup(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 774f52e..367341f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -1239,8 +1239,6 @@
 
   @Test
   public void testNoOutputAttrDefault() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_output_attr_default=true");
-
     scratch.file(
         "test/extension.bzl",
         "load('//myinfo:myinfo.bzl', 'MyInfo')",
@@ -1263,15 +1261,11 @@
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:r");
-    assertContainsEvent(
-        "parameter 'default' is deprecated and will be removed soon. It may be "
-            + "temporarily re-enabled by setting --incompatible_no_output_attr_default=false");
+    assertContainsEvent("got unexpected keyword argument 'default'");
   }
 
   @Test
   public void testNoOutputListAttrDefault() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_output_attr_default=true");
-
     scratch.file(
         "test/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -1288,45 +1282,7 @@
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:r");
-    assertContainsEvent(
-        "parameter 'default' is deprecated and will be removed soon. It may be "
-            + "temporarily re-enabled by setting --incompatible_no_output_attr_default=false");
-  }
-
-  @Test
-  public void testLegacyOutputAttrDefault() throws Exception {
-    // Note that use of the "default" parameter of attr.output and attr.output_label is deprecated
-    // and barely functional. This test simply serves as proof-of-concept verification that the
-    // legacy behavior remains intact.
-    setSkylarkSemanticsOptions("--incompatible_no_output_attr_default=false");
-
-    scratch.file(
-        "test/skylark/extension.bzl",
-        "load('//myinfo:myinfo.bzl', 'MyInfo')",
-        "def custom_rule_impl(ctx):",
-        "  out_file = ctx.actions.declare_file(ctx.attr._o1.name)",
-        "  ctx.actions.write(output=out_file, content='hi')",
-        "  return [MyInfo(o1=ctx.attr._o1,",
-        "                 o2=ctx.attr.o2)]",
-        "",
-        "def output_fn():",
-        "  return Label('//test/skylark:foo.txt')",
-        "",
-        "custom_rule = rule(implementation = custom_rule_impl,",
-        "  attrs = {'_o1': attr.output(default = output_fn),",
-        "           'o2': attr.output_list(default = [])})");
-
-    scratch.file(
-        "test/skylark/BUILD",
-        "load('//test/skylark:extension.bzl', 'custom_rule')",
-        "",
-        "custom_rule(name = 'cr')");
-
-    ConfiguredTarget target = getConfiguredTarget("//test/skylark:cr");
-    StructImpl myInfo = getMyInfoFromTarget(target);
-    assertThat(myInfo.getValue("o1"))
-        .isEqualTo(Label.parseAbsoluteUnchecked("//test/skylark:foo.txt"));
-    assertThat(myInfo.getValue("o2")).isEqualTo(StarlarkList.empty());
+    assertContainsEvent("got unexpected keyword argument 'default'");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
index 13d6c91..27e3882 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/EnablingAndDisablingFlag.java
@@ -31,8 +31,8 @@
         @Param(name = "one", type = String.class, named = true),
         @Param(name = "two", type = Integer.class, named = true),
       },
-      enableOnlyWithFlag = FlagIdentifier.INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT,
-      disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_OUTPUT_ATTR_DEFAULT)
+      enableOnlyWithFlag = FlagIdentifier.INCOMPATIBLE_APPLICABLE_LICENSES,
+      disableWithFlag = FlagIdentifier.INCOMPATIBLE_APPLICABLE_LICENSES)
   public String someMethod(String one, Integer two) {
     return "foo";
   }
