diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 3351db3..69b9a32 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -27,6 +27,7 @@
         "//src/test/java/com/google/devtools/build/lib/outputfilter:srcs",
         "//src/test/java/com/google/devtools/build/lib/packages:srcs",
         "//src/test/java/com/google/devtools/build/lib/packages/metrics:srcs",
+        "//src/test/java/com/google/devtools/build/lib/packages/semantics:srcs",
         "//src/test/java/com/google/devtools/build/lib/profiler:srcs",
         "//src/test/java/com/google/devtools/build/lib/profiler/callcounts:srcs",
         "//src/test/java/com/google/devtools/build/lib/profiler/memory:srcs",
@@ -263,7 +264,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function",
         "//src/main/java/com/google/devtools/build/lib/skyframe:diff_awareness",
@@ -398,7 +399,7 @@
         "//src/main/java/com/google/devtools/build/lib/exec:bin_tools",
         "//src/main/java/com/google/devtools/build/lib/exec:execution_options",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/query2",
         "//src/main/java/com/google/devtools/build/lib/query2/engine",
         "//src/main/java/com/google/devtools/build/lib/runtime/commands",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
index 6c9307b..1eece65 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
@@ -86,7 +86,7 @@
   }
 
   private void writeBasicTestFiles() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     getAnalysisMock().ccSupport().setupCcToolchainConfigForCpu(mockToolsConfig, "armeabi-v7a");
     scratch.file(
@@ -123,7 +123,7 @@
 
   @Test
   public void testStarlarkSplitTransitionSplitAttr() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/starlark/rules.bzl",
@@ -181,7 +181,7 @@
 
   @Test
   public void testStarlarkListSplitTransitionSplitAttr() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/starlark/rules.bzl",
@@ -233,7 +233,7 @@
 
   @Test
   public void testStarlarkPatchTransitionSplitAttr() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/starlark/rules.bzl",
@@ -284,7 +284,7 @@
   public void testStarlarkConfigSplitAttr() throws Exception {
     // This is a customized test case for b/152078818, where a starlark transition that takes a
     // starlark config as input caused a failure when no custom values were provided for the config.
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/starlark/rules.bzl",
@@ -348,7 +348,7 @@
 
   @Test
   public void testTargetAndRuleNotInAllowlist() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     getAnalysisMock().ccSupport().setupCcToolchainConfigForCpu(mockToolsConfig, "armeabi-v7a");
     scratch.file(
@@ -416,7 +416,7 @@
   }
 
   private void writeReadSettingsTestFiles() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -466,7 +466,7 @@
   }
 
   private void writeOptionConversionTestFiles() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -516,7 +516,7 @@
 
   @Test
   public void testUndeclaredOptionKey() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -549,7 +549,7 @@
 
   @Test
   public void testDeclaredOutputNotReturned() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -586,7 +586,7 @@
 
   @Test
   public void testSettingsContainOnlyInputs() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -623,7 +623,7 @@
 
   @Test
   public void testInvalidInputKey() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -658,7 +658,7 @@
 
   @Test
   public void testInvalidNativeOptionInput() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -694,7 +694,7 @@
 
   @Test
   public void testInvalidNativeOptionOutput() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -729,7 +729,7 @@
 
   @Test
   public void testInvalidOutputKey() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -764,7 +764,7 @@
 
   @Test
   public void testInvalidOptionValue() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -797,7 +797,7 @@
 
   @Test
   public void testDuplicateOutputs() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
 
     scratch.file(
@@ -890,7 +890,7 @@
   @Test
   public void testCannotTransitionWithoutFlag() throws Exception {
     writeBasicTestFiles();
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=false");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=false");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test/starlark:test");
@@ -1741,7 +1741,7 @@
    */
   private void testNoOpTransitionLeavesSameConfig_native(boolean directRead) throws Exception {
     writeAllowlistFile();
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
 
     String outputValue = directRead ? "settings['//command_line_option:test_arg']" : "['frisbee']";
     String inputs = directRead ? "['//command_line_option:test_arg']" : "[]";
@@ -1802,7 +1802,7 @@
   private void testNoOpTransitionLeavesSameConfig_starlark(boolean directRead, boolean setToDefault)
       throws Exception {
     writeAllowlistFile();
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
 
     String outputValue = directRead ? "settings['//test:flag']" : "'frisbee'";
     String inputs = directRead ? "['//test:flag']" : "[]";
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkExecGroupTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkExecGroupTest.java
index 0eb0c76..64fd5b8 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkExecGroupTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkExecGroupTest.java
@@ -40,7 +40,7 @@
 
   @Before
   public final void setUp() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_exec_groups");
+    setBuildLanguageOptions("--experimental_exec_groups");
   }
 
   /**
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
index 4a73eb4..6824044 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
@@ -439,7 +439,7 @@
 
   @Test
   public void testCannotTransitionOnBuildSettingWithoutFlag() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=false");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=false");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -458,7 +458,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromDefault() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -481,7 +481,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromCommandLine() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -506,7 +506,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_badValue() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -528,7 +528,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_noSuchTarget() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -549,7 +549,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_noSuchPackage() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -568,7 +568,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_notABuildSetting() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/transitions.bzl",
@@ -613,7 +613,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_dontStoreDefault() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -634,7 +634,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_fromDefault() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -657,7 +657,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_fromCommandLine() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -682,7 +682,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_notABuildSetting() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/transitions.bzl",
@@ -727,7 +727,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_noSuchTarget() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -748,7 +748,7 @@
 
   @Test
   public void testAliasedBuildSetting() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -783,7 +783,7 @@
 
   @Test
   public void testAliasedBuildSetting_chainedAliases() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -819,7 +819,7 @@
 
   @Test
   public void testAliasedBuildSetting_configuredActualValue() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -864,7 +864,7 @@
 
   @Test
   public void testAliasedBuildSetting_cyclicalAliases() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -890,7 +890,7 @@
 
   @Test
   public void testAliasedBuildSetting_setAliasAndActual() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -925,7 +925,7 @@
 
   @Test
   public void testAliasedBuildSetting_outputReturnMismatch() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     scratch.file(
         "test/transitions.bzl",
         "def _transition_impl(settings, attr):",
@@ -958,7 +958,7 @@
 
   @Test
   public void testOneParamTransitionFunctionApiFails() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
     writeAllowlistFile();
     scratch.file(
         "test/transitions.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
index 5ebc160..b92ae72 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
@@ -352,7 +352,7 @@
         "    ],",
         ")");
 
-    setStarlarkSemanticsOptions("--experimental_platforms_api");
+    setBuildLanguageOptions("--experimental_platforms_api");
     ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
     assertThat(platform).isNotNull();
 
@@ -411,7 +411,7 @@
         "    ],",
         ")");
 
-    setStarlarkSemanticsOptions("--experimental_platforms_api");
+    setBuildLanguageOptions("--experimental_platforms_api");
     ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
     assertThat(platform).isNotNull();
 
@@ -453,7 +453,7 @@
         "constraint_value(name = 'foo',",
         "    constraint_setting = ':basic',",
         ")");
-    setStarlarkSemanticsOptions("--experimental_platforms_api");
+    setBuildLanguageOptions("--experimental_platforms_api");
     checkError(
         "test/platform",
         "custom",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index 22f376b..d25589e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -53,8 +53,8 @@
 import com.google.devtools.build.lib.exec.ExecutionOptions;
 import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.MockToolsConfig;
 import com.google.devtools.build.lib.pkgcache.LoadingOptions;
 import com.google.devtools.build.lib.pkgcache.PackageManager;
@@ -222,7 +222,7 @@
     skyframeExecutor.preparePackageLoading(
         pkgLocator,
         packageOptions,
-        Options.getDefaults(StarlarkSemanticsOptions.class),
+        Options.getDefaults(BuildLanguageOptions.class),
         UUID.randomUUID(),
         ImmutableMap.of(),
         new TimestampGranularityMonitor(BlazeClock.instance()));
@@ -267,7 +267,7 @@
                     Arrays.asList(
                         ExecutionOptions.class,
                         PackageOptions.class,
-                        StarlarkSemanticsOptions.class,
+                        BuildLanguageOptions.class,
                         BuildRequestOptions.class,
                         AnalysisOptions.class,
                         KeepGoingOption.class,
@@ -362,8 +362,8 @@
     packageOptions.showLoadingProgress = true;
     packageOptions.globbingThreads = 7;
 
-    StarlarkSemanticsOptions starlarkSemanticsOptions =
-        optionsParser.getOptions(StarlarkSemanticsOptions.class);
+    BuildLanguageOptions starlarkSemanticsOptions =
+        optionsParser.getOptions(BuildLanguageOptions.class);
 
     skyframeExecutor.preparePackageLoading(
         pathPackageLocator,
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
index 83e703e..0035181 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
@@ -89,8 +89,8 @@
         "//src/main/java/com/google/devtools/build/lib/exec:execution_options",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:build_type",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
         "//src/main/java/com/google/devtools/build/lib/packages:type",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index c69e5fc..ec66bc3 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -128,8 +128,8 @@
 import com.google.devtools.build.lib.packages.PackageValidator;
 import com.google.devtools.build.lib.packages.RawAttributeMapper;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.MockToolsConfig;
 import com.google.devtools.build.lib.pkgcache.LoadingOptions;
 import com.google.devtools.build.lib.pkgcache.PackageManager;
@@ -216,7 +216,7 @@
 
   protected OptionsParser optionsParser;
   private PackageOptions packageOptions;
-  private StarlarkSemanticsOptions starlarkSemanticsOptions;
+  private BuildLanguageOptions starlarkSemanticsOptions;
   protected PackageFactory pkgFactory;
 
   protected MockToolsConfig mockToolsConfig;
@@ -263,7 +263,7 @@
     initializeMockClient();
 
     packageOptions = parsePackageOptions();
-    starlarkSemanticsOptions = parseStarlarkSemanticsOptions();
+    starlarkSemanticsOptions = parseBuildLanguageOptions();
     workspaceStatusActionFactory = new AnalysisTestUtil.DummyWorkspaceStatusActionFactory();
     mutableActionGraph = new MapBasedActionGraph(actionKeyContext);
     ruleClassProvider = createRuleClassProvider();
@@ -499,8 +499,8 @@
     setUpSkyframe();
   }
 
-  protected void setStarlarkSemanticsOptions(String... options) throws Exception {
-    starlarkSemanticsOptions = parseStarlarkSemanticsOptions(options);
+  protected void setBuildLanguageOptions(String... options) throws Exception {
+    starlarkSemanticsOptions = parseBuildLanguageOptions(options);
     setUpSkyframe();
   }
 
@@ -511,12 +511,12 @@
     return parser.getOptions(PackageOptions.class);
   }
 
-  private static StarlarkSemanticsOptions parseStarlarkSemanticsOptions(String... options)
+  private static BuildLanguageOptions parseBuildLanguageOptions(String... options)
       throws Exception {
     OptionsParser parser =
-        OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
+        OptionsParser.builder().optionsClasses(BuildLanguageOptions.class).build();
     parser.parse(options);
-    return parser.getOptions(StarlarkSemanticsOptions.class);
+    return parser.getOptions(BuildLanguageOptions.class);
   }
 
   /** Used by skyframe-only tests. */
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index a4833fa..240d697 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -33,7 +33,7 @@
 import com.google.devtools.build.lib.clock.BlazeClock;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.MockToolsConfig;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
@@ -166,7 +166,7 @@
     skyframeExecutor.preparePackageLoading(
         pkgLocator,
         packageOptions,
-        Options.getDefaults(StarlarkSemanticsOptions.class),
+        Options.getDefaults(BuildLanguageOptions.class),
         UUID.randomUUID(),
         ImmutableMap.<String, String>of(),
         new TimestampGranularityMonitor(BlazeClock.instance()));
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
index 17e5196..a370676 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
@@ -178,7 +178,7 @@
           "    constraints = HOST_CONSTRAINTS,",
           ")");
 
-      setStarlarkSemanticsOptions("--experimental_platforms_api");
+      setBuildLanguageOptions("--experimental_platforms_api");
       ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
       assertThat(platform).isNotNull();
 
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
index 2d8ee56..195bc48 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
@@ -55,7 +55,7 @@
 
   @Before
   public void setUp() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_ninja_actions");
+    setBuildLanguageOptions("--experimental_ninja_actions");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
index d9fec01..ea68116 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
@@ -51,7 +51,7 @@
 
   @Before
   public void setUp() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_ninja_actions");
+    setBuildLanguageOptions("--experimental_ninja_actions");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
index f702776..daa4253 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
@@ -63,7 +63,7 @@
         "//src/main/java/com/google/devtools/build/lib/network:connectivity_status",
         "//src/main/java/com/google/devtools/build/lib/network:noop_connectivity",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/profiler",
         "//src/main/java/com/google/devtools/build/lib/query2",
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
index 2033fb8..7fc4dc8 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
@@ -35,7 +35,7 @@
 import com.google.devtools.build.lib.exec.BinTools;
 import com.google.devtools.build.lib.exec.ExecutionOptions;
 import com.google.devtools.build.lib.exec.local.LocalExecutionOptions;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.LoadingOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.profiler.Profiler;
@@ -150,7 +150,7 @@
                 KeepGoingOption.class,
                 LoadingPhaseThreadsOption.class,
                 PackageOptions.class,
-                StarlarkSemanticsOptions.class,
+                BuildLanguageOptions.class,
                 UiOptions.class,
                 SandboxOptions.class,
                 AqueryOptions.class));
diff --git a/src/test/java/com/google/devtools/build/lib/packages/BUILD b/src/test/java/com/google/devtools/build/lib/packages/BUILD
index 2db3d52..a5606b6 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/packages/BUILD
@@ -23,7 +23,7 @@
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/common/options",
         "//src/test/java/com/google/devtools/build/lib/testutil",
@@ -68,19 +68,16 @@
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:build_type",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
         "//src/main/java/com/google/devtools/build/lib/packages:type",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/skyframe:tests_for_target_pattern_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
-        "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
         "//src/test/java/com/google/devtools/build/lib/events:testutil",
@@ -139,7 +136,7 @@
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/exec:test_policy",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function",
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
index 1ff7412..6a80fd3 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -116,15 +117,14 @@
   }
 
   protected void setStarlarkSemantics(String... options) throws Exception {
-    starlarkSemantics = parseStarlarkSemanticsOptions(options);
+    starlarkSemantics = parseBuildLanguageOptions(options);
   }
 
-  private static StarlarkSemantics parseStarlarkSemanticsOptions(String... options)
-      throws Exception {
+  private static StarlarkSemantics parseBuildLanguageOptions(String... options) throws Exception {
     OptionsParser parser =
-        OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
+        OptionsParser.builder().optionsClasses(BuildLanguageOptions.class).build();
     parser.parse(options);
-    return parser.getOptions(StarlarkSemanticsOptions.class).toStarlarkSemantics();
+    return parser.getOptions(BuildLanguageOptions.class).toStarlarkSemantics();
   }
 
 }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD b/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD
new file mode 100644
index 0000000..66b88a1
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD
@@ -0,0 +1,36 @@
+load("@rules_java//java:defs.bzl", "java_test")
+
+licenses(["notice"])
+
+package(
+    default_testonly = 1,
+    default_visibility = ["//src:__subpackages__"],
+)
+
+filegroup(
+    name = "srcs",
+    testonly = 0,
+    srcs = glob(["**"]),
+    visibility = ["//src:__subpackages__"],
+)
+
+java_test(
+    name = "ConsistencyTest",
+    size = "small",
+    srcs = ["ConsistencyTest.java"],
+    test_class = "com.google.devtools.build.lib.AllTests",
+    runtime_deps = [
+        "//src/test/java/com/google/devtools/build/lib:test_runner",
+    ],
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
+        "//src/main/java/com/google/devtools/common/options",
+        "//third_party:guava",
+        "//third_party:junit4",
+        "//third_party:mockito",
+        "//third_party:truth",
+    ],
+)
diff --git a/src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
similarity index 88%
rename from src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java
rename to src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
index 8be395d..3158669 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 //
 
-package com.google.devtools.build.lib.packages;
+package com.google.devtools.build.lib.packages.semantics;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -33,18 +33,18 @@
 import org.junit.runners.JUnit4;
 
 /**
- * Tests for the flow of flags from {@link StarlarkSemanticsOptions} to {@link StarlarkSemantics},
- * and to and from {@code StarlarkSemantics}' serialized representation.
+ * Tests for the flow of flags from {@link BuildLanguageOptions} to {@link StarlarkSemantics}, and
+ * to and from {@code StarlarkSemantics}' serialized representation.
  *
  * <p>When adding a new option, it is trivial to make a transposition error or a copy/paste error.
  * These tests guard against such errors. The following possible bugs are considered:
  *
  * <ul>
  *   <li>If a new option is added to {@code StarlarkSemantics} but not to {@code
- *       StarlarkSemanticsOptions}, or vice versa, then the programmer will either be unable to
+ *       BuildLanguageOptions}, or vice versa, then the programmer will either be unable to
  *       implement its behavior, or unable to test it from the command line and add user
  *       documentation. We hope that the programmer notices this on their own.
- *   <li>If {@link StarlarkSemanticsOptions#toStarlarkSemantics} is not updated to set all fields of
+ *   <li>If {@link BuildLanguageOptions#toStarlarkSemantics} is not updated to set all fields of
  *       {@code StarlarkSemantics}, then it will fail immediately because all fields of {@link
  *       StarlarkSemantics.Builder} are mandatory.
  *   <li>To catch a copy/paste error where the wrong field's data is threaded through {@code
@@ -57,19 +57,19 @@
  * </ul>
  */
 @RunWith(JUnit4.class)
-public class StarlarkSemanticsConsistencyTest {
+public class ConsistencyTest {
 
   private static final int NUM_RANDOM_TRIALS = 10;
 
   /**
-   * Checks that a randomly generated {@link StarlarkSemanticsOptions} object can be converted to a
+   * Checks that a randomly generated {@link BuildLanguageOptions} object can be converted to a
    * {@link StarlarkSemantics} object with the same field values.
    */
   @Test
   public void optionsToSemantics() throws Exception {
     for (int i = 0; i < NUM_RANDOM_TRIALS; i++) {
       long seed = i;
-      StarlarkSemanticsOptions options = buildRandomOptions(new Random(seed));
+      BuildLanguageOptions options = buildRandomOptions(new Random(seed));
       StarlarkSemantics semantics = buildRandomSemantics(new Random(seed));
       StarlarkSemantics semanticsFromOptions = options.toStarlarkSemantics();
       assertThat(semanticsFromOptions).isEqualTo(semantics);
@@ -97,7 +97,7 @@
 
   @Test
   public void checkDefaultsMatch() {
-    StarlarkSemanticsOptions defaultOptions = Options.getDefaults(StarlarkSemanticsOptions.class);
+    BuildLanguageOptions defaultOptions = Options.getDefaults(BuildLanguageOptions.class);
     StarlarkSemantics defaultSemantics = StarlarkSemantics.DEFAULT;
     StarlarkSemantics semanticsFromOptions = defaultOptions.toStarlarkSemantics();
     assertThat(semanticsFromOptions).isEqualTo(defaultSemantics);
@@ -112,11 +112,10 @@
   }
 
   /**
-   * Constructs a {@link StarlarkSemanticsOptions} object with random fields. Must access {@code
-   * rand} using the same sequence of operations (for the same fields) as {@link
-   * #buildRandomSemantics}.
+   * Constructs a {@link BuildLanguageOptions} object with random fields. Must access {@code rand}
+   * using the same sequence of operations (for the same fields) as {@link #buildRandomSemantics}.
    */
-  private static StarlarkSemanticsOptions buildRandomOptions(Random rand) throws Exception {
+  private static BuildLanguageOptions buildRandomOptions(Random rand) throws Exception {
     return parseOptions(
         // <== Add new options here in alphabetic order ==>
         "--experimental_disable_external_package=" + rand.nextBoolean(),
@@ -211,13 +210,13 @@
         .build();
   }
 
-  private static StarlarkSemanticsOptions parseOptions(String... args) throws Exception {
+  private static BuildLanguageOptions parseOptions(String... args) throws Exception {
     OptionsParser parser =
         OptionsParser.builder()
-            .optionsClasses(StarlarkSemanticsOptions.class)
+            .optionsClasses(BuildLanguageOptions.class)
             .allowResidue(false)
             .build();
     parser.parse(Arrays.asList(args));
-    return parser.getOptions(StarlarkSemanticsOptions.class);
+    return parser.getOptions(BuildLanguageOptions.class);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
index 0138ebc..2e51915c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -31,7 +31,7 @@
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.PackageValidator;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -107,13 +107,13 @@
       throws Exception {
 
     OptionsParser parser =
-        OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
+        OptionsParser.builder().optionsClasses(BuildLanguageOptions.class).build();
     parser.parse(
         starlarkOption == null
             ? ImmutableList.<String>of()
             : ImmutableList.<String>of(starlarkOption));
     StarlarkSemantics semantics =
-        parser.getOptions(StarlarkSemanticsOptions.class).toStarlarkSemantics();
+        parser.getOptions(BuildLanguageOptions.class).toStarlarkSemantics();
 
     try {
       Package externalPkg =
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
index 2e52573..8106d9f 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
@@ -32,8 +32,8 @@
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleVisibility;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageManager;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
@@ -66,7 +66,7 @@
 
   protected LoadingMock loadingMock;
   private PackageOptions packageOptions;
-  private StarlarkSemanticsOptions starlarkSemanticsOptions;
+  private BuildLanguageOptions starlarkSemanticsOptions;
   protected ConfiguredRuleClassProvider ruleClassProvider;
   protected PackageFactory packageFactory;
   protected SkyframeExecutor skyframeExecutor;
@@ -77,7 +77,7 @@
   public final void initializeSkyframeExecutor() throws Exception {
     loadingMock = LoadingMock.get();
     packageOptions = parsePackageOptions();
-    starlarkSemanticsOptions = parseStarlarkSemanticsOptions();
+    starlarkSemanticsOptions = parseBuildLanguageOptions();
     List<RuleDefinition> extraRules = getExtraRules();
     if (!extraRules.isEmpty()) {
       ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder();
@@ -146,7 +146,7 @@
             ImmutableList.of(Root.fromPath(rootDirectory)),
             BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
         packageOptions,
-        Options.getDefaults(StarlarkSemanticsOptions.class),
+        Options.getDefaults(BuildLanguageOptions.class),
         UUID.randomUUID(),
         ImmutableMap.<String, String>of(),
         new TimestampGranularityMonitor(BlazeClock.instance()));
@@ -182,12 +182,12 @@
     return parser.getOptions(PackageOptions.class);
   }
 
-  private static StarlarkSemanticsOptions parseStarlarkSemanticsOptions(String... options)
+  private static BuildLanguageOptions parseBuildLanguageOptions(String... options)
       throws Exception {
     OptionsParser parser =
-        OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
+        OptionsParser.builder().optionsClasses(BuildLanguageOptions.class).build();
     parser.parse(options);
-    return parser.getOptions(StarlarkSemanticsOptions.class);
+    return parser.getOptions(BuildLanguageOptions.class);
   }
 
   protected void setPackageOptions(String... options) throws Exception {
@@ -195,8 +195,8 @@
     setUpSkyframe();
   }
 
-  protected void setStarlarkSemanticsOptions(String... options) throws Exception {
-    starlarkSemanticsOptions = parseStarlarkSemanticsOptions(options);
+  protected void setBuildLanguageOptions(String... options) throws Exception {
+    starlarkSemanticsOptions = parseBuildLanguageOptions(options);
     setUpSkyframe();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
index 88349df..05c3c01 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
@@ -102,14 +102,14 @@
     SkyframeExecutorTestHelper.process(skyframeExecutor);
     OptionsParser parser =
         OptionsParser.builder()
-            .optionsClasses(PackageOptions.class, StarlarkSemanticsOptions.class)
+            .optionsClasses(PackageOptions.class, BuildLanguageOptions.class)
             .build();
     setUpSkyframe(
-        parser.getOptions(PackageOptions.class), parser.getOptions(StarlarkSemanticsOptions.class));
+        parser.getOptions(PackageOptions.class), parser.getOptions(BuildLanguageOptions.class));
   }
 
   private void setUpSkyframe(
-      PackageOptions packageOptions, StarlarkSemanticsOptions starlarkSemanticsOptions) {
+      PackageOptions packageOptions, BuildLanguageOptions starlarkSemanticsOptions) {
     PathPackageLocator pkgLocator =
         PathPackageLocator.create(
             null,
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index 63f8d58..6c30098 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -36,8 +36,8 @@
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.LoadingMock;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
@@ -479,7 +479,7 @@
               ImmutableList.of(Root.fromPath(workspace)),
               BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
           packageOptions,
-          Options.getDefaults(StarlarkSemanticsOptions.class),
+          Options.getDefaults(BuildLanguageOptions.class),
           UUID.randomUUID(),
           ImmutableMap.<String, String>of(),
           new TimestampGranularityMonitor(BlazeClock.instance()));
@@ -569,7 +569,7 @@
               ImmutableList.of(Root.fromPath(workspace)),
               BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
           packageOptions,
-          Options.getDefaults(StarlarkSemanticsOptions.class),
+          Options.getDefaults(BuildLanguageOptions.class),
           UUID.randomUUID(),
           ImmutableMap.<String, String>of(),
           new TimestampGranularityMonitor(BlazeClock.instance()));
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
index ffb6cb0..1d5eb6f 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
@@ -45,8 +45,8 @@
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.MockToolsConfig;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading;
@@ -1285,7 +1285,7 @@
       skyframeExecutor.preparePackageLoading(
           pkgLocator,
           packageOptions,
-          Options.getDefaults(StarlarkSemanticsOptions.class),
+          Options.getDefaults(BuildLanguageOptions.class),
           UUID.randomUUID(),
           ImmutableMap.<String, String>of(),
           new TimestampGranularityMonitor(clock));
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java
index 6bef46b..b3bb2bf 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java
@@ -35,8 +35,8 @@
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
@@ -107,11 +107,11 @@
             .setExtraSkyFunctions(analysisMock.getSkyFunctions(directories))
             .build();
     SkyframeExecutorTestHelper.process(skyframeExecutor);
-    setUpSkyframe(parsePackageOptions(), parseStarlarkSemanticsOptions());
+    setUpSkyframe(parsePackageOptions(), parseBuildLanguageOptions());
   }
 
   private void setUpSkyframe(
-      PackageOptions packageOptions, StarlarkSemanticsOptions starlarkSemanticsOptions) {
+      PackageOptions packageOptions, BuildLanguageOptions starlarkSemanticsOptions) {
     PathPackageLocator pkgLocator =
         PathPackageLocator.create(
             null,
@@ -140,7 +140,7 @@
   private OptionsParser parse(String... options) throws Exception {
     OptionsParser parser =
         OptionsParser.builder()
-            .optionsClasses(PackageOptions.class, StarlarkSemanticsOptions.class)
+            .optionsClasses(PackageOptions.class, BuildLanguageOptions.class)
             .build();
     parser.parse("--default_visibility=public");
     parser.parse(options);
@@ -152,13 +152,12 @@
     return parse(options).getOptions(PackageOptions.class);
   }
 
-  private StarlarkSemanticsOptions parseStarlarkSemanticsOptions(String... options)
-      throws Exception {
-    return parse(options).getOptions(StarlarkSemanticsOptions.class);
+  private BuildLanguageOptions parseBuildLanguageOptions(String... options) throws Exception {
+    return parse(options).getOptions(BuildLanguageOptions.class);
   }
 
   protected void setOptions(String... options) throws Exception {
-    setUpSkyframe(parsePackageOptions(options), parseStarlarkSemanticsOptions(options));
+    setUpSkyframe(parsePackageOptions(options), parseBuildLanguageOptions(options));
   }
 
   private PackageManager getPackageManager() {
diff --git a/src/test/java/com/google/devtools/build/lib/query2/testutil/BUILD b/src/test/java/com/google/devtools/build/lib/query2/testutil/BUILD
index a08c6d7..be54e40 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/testutil/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/query2/testutil/BUILD
@@ -31,8 +31,8 @@
         "//src/main/java/com/google/devtools/build/lib/graph",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:build_type",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
         "//src/main/java/com/google/devtools/build/lib/packages:type",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/query2",
         "//src/main/java/com/google/devtools/build/lib/query2/common:abstract-blaze-query-env",
diff --git a/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java b/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
index 3dea9f8..a714600 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
@@ -30,8 +30,8 @@
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.packages.util.MockToolsConfig;
 import com.google.devtools.build.lib.pkgcache.PackageManager;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
@@ -291,7 +291,7 @@
           getReporter(),
           packageOptions,
           packageLocator,
-          Options.getDefaults(StarlarkSemanticsOptions.class),
+          Options.getDefaults(BuildLanguageOptions.class),
           UUID.randomUUID(),
           ImmutableMap.<String, String>of(),
           new TimestampGranularityMonitor(BlazeClock.instance()),
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 9a164ce..62606f8 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -94,7 +94,7 @@
         "java/android/res/values/strings.xml",
         "<resources><string name = 'hello'>Hello Android!</string></resources>");
     scratch.file("java/android/A.java", "package android; public class A {};");
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
index c7738e7..3664e48 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
@@ -69,7 +69,7 @@
         "        'android_21/x86/userdata.img.tar.gz'",
         "    ],",
         ")");
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
   }
 
   private FilesToRunProvider getToolDependency(String label) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
index e4075a2..11945ad 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
@@ -92,7 +92,7 @@
         "  ],",
         ")");
     setupTargetDevice();
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
   }
 
   // TODO(ajmichael): Share this with AndroidDeviceTest.java
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
index b6f1340..170a50d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
@@ -34,7 +34,7 @@
 
   @Test
   public void enableImplicitSourcelessDepsExportsCompatibilityTest() throws Exception {
-    setStarlarkSemanticsOptions(
+    setBuildLanguageOptions(
         "--experimental_enable_android_migration_apis", "--experimental_google_legacy_api");
     scratch.file(
         "java/android/compatible.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkTest.java
index 9ef5ac7..8512691 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkTest.java
@@ -68,7 +68,7 @@
     scratch.file("myinfo/myinfo.bzl", "MyInfo = provider()");
 
     scratch.file("myinfo/BUILD");
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
   }
 
   private StructImpl getMyInfoFromTarget(ConfiguredTarget configuredTarget) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
index 95e6155..cf79efa 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
@@ -38,7 +38,7 @@
 
   @Before
   public void setStarlarkImplementationLoadStatement() throws Exception {
-    setStarlarkSemanticsOptions(StarlarkCcCommonTestHelper.CC_STARLARK_WHITELIST_FLAG);
+    setBuildLanguageOptions(StarlarkCcCommonTestHelper.CC_STARLARK_WHITELIST_FLAG);
     invalidatePackages();
     setIsStarlarkImplementation();
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
index 3cd82a0..93b8e9d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
@@ -81,8 +81,8 @@
 public class StarlarkCcCommonTest extends BuildViewTestCase {
 
   @Before
-  public void setStarlarkSemanticsOptions() throws Exception {
-    this.setStarlarkSemanticsOptions(StarlarkCcCommonTestHelper.CC_STARLARK_WHITELIST_FLAG);
+  public void setBuildLanguageOptions() throws Exception {
+    this.setBuildLanguageOptions(StarlarkCcCommonTestHelper.CC_STARLARK_WHITELIST_FLAG);
     invalidatePackages();
 
     scratch.file("myinfo/myinfo.bzl", "MyInfo = provider()");
@@ -1316,7 +1316,7 @@
                     CppRuleClasses.PIC,
                     CppRuleClasses.SUPPORTS_PIC,
                     CppRuleClasses.SUPPORTS_DYNAMIC_LINKER));
-    this.setStarlarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
+    this.setBuildLanguageOptions("--incompatible_depset_for_libraries_to_link_getter");
     setUpCcLinkingContextTest(false);
     ConfiguredTarget a = getConfiguredTarget("//a:a");
     StructImpl info = ((StructImpl) getMyInfoFromTarget(a).getValue("info"));
@@ -1430,7 +1430,7 @@
       List<String> dynamicLibraryList)
       throws Exception {
     useConfiguration("--features=-supports_interface_shared_libraries");
-    this.setStarlarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
+    this.setBuildLanguageOptions("--incompatible_depset_for_libraries_to_link_getter");
     setUpCcLinkingContextTest(false);
     ConfiguredTarget a = getConfiguredTarget("//a:a");
 
@@ -6364,7 +6364,7 @@
   /** Fixes #10580 */
   @Test
   public void testMixedLinkerInputsWithOwnerAndWithout() throws Exception {
-    setStarlarkSemanticsOptions("--noincompatible_require_linker_input_cc_api");
+    setBuildLanguageOptions("--noincompatible_require_linker_input_cc_api");
     setUpCcLinkingContextTest(false);
     scratch.file("foo/BUILD", "load(':rule.bzl', 'crule')", "crule(name='a')");
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
index 7b5464c..2132c84 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
@@ -88,7 +88,7 @@
 
   @Before
   public final void setupStarlarkRule() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setBuildLanguageOptions("--incompatible_new_actions_api=false");
 
     File[] files = Runfiles.location(RULE_DIRECTORY).listFiles();
     for (File file : files) {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
index 55ced75..90b41b9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
@@ -109,7 +109,7 @@
     useConfiguration(
         "--proto_toolchain_for_java=//tools/proto/toolchains:java",
         "--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     testJ2ObjCInformationExportedFromJ2ObjcLibrary();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
index a8a76dc..7331246 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -512,7 +512,7 @@
     useConfiguration(
         "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
         "--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     addBinWithTransitiveDepOnFrameworkImport(false);
     CommandAction compileAction = compileAction("//lib:lib", "a.o");
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
index c2038e5..677c308 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
@@ -105,7 +105,7 @@
   @Test
   public void testObjcProtoAspectPropagatesProtobufProviderPreMigration() throws Exception {
     useConfiguration("--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     testObjcProtoAspectPropagatesProtobufProvider();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkTest.java
index d33bbe4..13a4d09 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkTest.java
@@ -295,7 +295,7 @@
         ")");
 
     useConfiguration("--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget libRootTarget = getConfiguredTarget("//examples/apple_starlark:lib_root");
     ObjcProvider libRootObjcProvider = libRootTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
     assertThat(libRootObjcProvider.define().toList()).contains("mock_define");
@@ -384,7 +384,7 @@
         ")");
 
     useConfiguration("--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget libTarget = getConfiguredTarget("//examples/apple_starlark:lib");
     ObjcProvider libObjcProvider = libTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
     assertThat(libObjcProvider.define().toList()).contains("mock_define");
@@ -1078,20 +1078,20 @@
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithHeadersPreAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     testStarlarkCanCreateObjcProviderWithHeaders();
   }
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithHeadersPostAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     testStarlarkCanCreateObjcProviderWithHeaders();
   }
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithIncludePathFragmentsPreAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
@@ -1112,7 +1112,7 @@
   @Test
   public void testStarlarkCanCreateObjcProviderWithFrameworkIncludesPreAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   includes = depset(['path1/foo.framework', 'path_dir/path2/bar.framework'])",
@@ -1129,7 +1129,7 @@
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithSystemIncludesPreAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
@@ -1149,7 +1149,7 @@
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithQuoteIncludesPreAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
@@ -1170,7 +1170,7 @@
   @Test
   public void testStarlarkCannotCreateObjcProviderWithIncludePathFragmentsPostAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1187,7 +1187,7 @@
 
   @Test
   public void testStarlarkCannotCreateObjcProviderWithDefinePostAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1205,7 +1205,7 @@
   @Test
   public void testStarlarkCannotCreateObjcProviderWithFrameworkIncludesPostAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1224,7 +1224,7 @@
   @Test
   public void testStarlarkCannotCreateObjcProviderWithSystemIncludesPostAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1242,7 +1242,7 @@
   @Test
   public void testStarlarkCannotCreateObjcProviderWithQuoteIncludesPostAPIRemoval()
       throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1259,7 +1259,7 @@
 
   @Test
   public void testStarlarkCanCreateObjcProviderWithMergeZipsPreAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   file = ctx.actions.declare_file('file')",
@@ -1276,7 +1276,7 @@
 
   @Test
   public void testStarlarkCannotCreateObjcProviderWithMergeZipsPostAPIRemoval() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=true");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=true");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1295,7 +1295,7 @@
   @Test
   public void testStarlarkCanCreateObjcProviderWithStrictDepsPreMigration() throws Exception {
     useConfiguration("--incompatible_objc_compile_info_migration=false");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   strict_includes = depset(['path1'])",
@@ -1339,7 +1339,7 @@
   @Test
   public void testStarlarkCanCreateObjcProviderWithStrictDepsPostMigration() throws Exception {
     useConfiguration("--incompatible_objc_compile_info_migration=true");
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     ConfiguredTarget starlarkTarget =
         createObjcProviderStarlarkTarget(
             "   strict_includes = depset(['path1'])",
@@ -1397,7 +1397,7 @@
 
   @Test
   public void testStarlarkStrictDepsDoesNotSupportDefine() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     AssertionError e =
         assertThrows(
             AssertionError.class,
@@ -1416,7 +1416,7 @@
 
   @Test
   public void testStarlarkStrictDepsDoesNotSupportLinkopt() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_objc_provider_remove_compile_info=false");
+    setBuildLanguageOptions("--incompatible_objc_provider_remove_compile_info=false");
     AssertionError e =
         assertThrows(
             AssertionError.class,
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
index d80aee9..0b53f8b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
@@ -108,7 +108,7 @@
 
   @Test
   public void testConstraintValue_starlark() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
+    setBuildLanguageOptions("--experimental_platforms_api=true");
     constraintBuilder("//foo:s1").addConstraintValue("value1").write();
     constraintBuilder("//foo:s2").addConstraintValue("value2").write();
     platformBuilder("//foo:my_platform").addConstraint("value1").addConstraint("value2").write();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
index a3b5d12..05c6d0d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
@@ -141,7 +141,7 @@
 
   @Test
   public void testConstraint_defaultValue_starlark() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
+    setBuildLanguageOptions("--experimental_platforms_api=true");
     scratch.file(
         "constraint_default/BUILD",
         "constraint_setting(name = 'basic',",
@@ -198,7 +198,7 @@
 
   @Test
   public void testConstraint_defaultValue_notSet_starlark() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
+    setBuildLanguageOptions("--experimental_platforms_api=true");
     scratch.file("constraint_default/BUILD", "constraint_setting(name = 'basic')");
 
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
index 6996171..315b113 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
@@ -358,7 +358,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setBuildLanguageOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/foo/WORKSPACE");
@@ -464,7 +464,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setBuildLanguageOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -518,7 +518,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setBuildLanguageOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -573,7 +573,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setBuildLanguageOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -627,7 +627,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setBuildLanguageOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java b/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
index 5e71c0d..f673002 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
@@ -67,7 +67,7 @@
         "my_rule(name = 'default', wrapped = ':wrapped', python_version = 'DEFAULT')",
         "my_rule(name = 'invalid', wrapped = ':wrapped', python_version = 'invalid')",
         "missing_attr_rule(name = 'missing_attr', wrapped = ':wrapped')");
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/AbstractCommandTest.java b/src/test/java/com/google/devtools/build/lib/runtime/AbstractCommandTest.java
index e84ec4b..d1dea1b 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/AbstractCommandTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/AbstractCommandTest.java
@@ -17,7 +17,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.testutil.TestConstants;
 import com.google.devtools.common.options.Option;
 import com.google.devtools.common.options.OptionDocumentationCategory;
@@ -135,7 +135,7 @@
     result.add(UiOptions.class);
     result.add(CommonCommandOptions.class);
     result.add(ClientOptions.class);
-    result.add(StarlarkSemanticsOptions.class);
+    result.add(BuildLanguageOptions.class);
     return result;
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
index b1b9b46..8866ae0 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.events.EventCollector;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.packages.BuildFileName;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
@@ -305,7 +305,7 @@
         reporter,
         packageOptions,
         pathPackageLocator,
-        Options.getDefaults(StarlarkSemanticsOptions.class),
+        Options.getDefaults(BuildLanguageOptions.class),
         UUID.randomUUID(),
         /*clientEnv=*/ ImmutableMap.of(),
         new TimestampGranularityMonitor(BlazeClock.instance()),
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index 3c86386..e0803a0 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -158,7 +158,7 @@
         "//src/main/java/com/google/devtools/build/lib/exec:single_build_file_cache",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages:build_type",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/packages:type",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/remote/options",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BuiltinsInjectionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/BuiltinsInjectionTest.java
index 3cda7c50..70f9401 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BuiltinsInjectionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BuiltinsInjectionTest.java
@@ -52,7 +52,7 @@
 
   @Before
   public void setUp() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_builtins_bzl_path=notdisabled");
+    setBuildLanguageOptions("--experimental_builtins_bzl_path=notdisabled");
   }
 
   /**
@@ -172,7 +172,7 @@
     writePkgBzl(
         "print('overridable_symbol :: ' + str(overridable_symbol))",
         "print('overridable_rule :: ' + str(native.overridable_rule))");
-    setStarlarkSemanticsOptions("--experimental_builtins_bzl_path=");
+    setBuildLanguageOptions("--experimental_builtins_bzl_path=");
 
     buildDummyAndAssertSuccess();
     assertContainsEvent("overridable_symbol :: original_value");
@@ -187,7 +187,7 @@
     writePkgBzl(
         "print('overridable_symbol :: ' + str(overridable_symbol))",
         "print('overridable_rule :: ' + str(native.overridable_rule))");
-    setStarlarkSemanticsOptions("--experimental_builtins_bzl_path=");
+    setBuildLanguageOptions("--experimental_builtins_bzl_path=");
 
     buildDummyAndAssertSuccess();
     assertContainsEvent("overridable_symbol :: original_value");
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BzlLoadFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/BzlLoadFunctionTest.java
index e2e395d..2dfc450 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BzlLoadFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BzlLoadFunctionTest.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.BazelModuleContext;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
@@ -73,7 +73,7 @@
                 ImmutableList.of(Root.fromPath(rootDirectory), Root.fromPath(alternativeRoot)),
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
             packageOptions,
-            Options.getDefaults(StarlarkSemanticsOptions.class),
+            Options.getDefaults(BuildLanguageOptions.class),
             UUID.randomUUID(),
             ImmutableMap.<String, String>of(),
             new TimestampGranularityMonitor(BlazeClock.instance()));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 05157c5..1ae670a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -42,7 +42,7 @@
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.PackageValidator;
 import com.google.devtools.build.lib.packages.PackageValidator.InvalidPackageException;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
@@ -107,11 +107,11 @@
 
   private void preparePackageLoading(Path... roots) {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.getDefaults(StarlarkSemanticsOptions.class), roots);
+        Options.getDefaults(BuildLanguageOptions.class), roots);
   }
 
   private void preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-      StarlarkSemanticsOptions starlarkSemanticsOptions, Path... roots) {
+      BuildLanguageOptions starlarkSemanticsOptions, Path... roots) {
     PackageOptions packageOptions = Options.getDefaults(PackageOptions.class);
     packageOptions.defaultVisibility = ConstantRuleVisibility.PUBLIC;
     packageOptions.showLoadingProgress = true;
@@ -450,7 +450,7 @@
                 ImmutableList.of(Root.fromPath(rootDirectory)),
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
             packageOptions,
-            Options.getDefaults(StarlarkSemanticsOptions.class),
+            Options.getDefaults(BuildLanguageOptions.class),
             UUID.randomUUID(),
             ImmutableMap.<String, String>of(),
             tsgm);
@@ -963,7 +963,7 @@
   @Test
   public void testGlobAllowEmpty_starlarkOption() throws Exception {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.parse(StarlarkSemanticsOptions.class, "--incompatible_disallow_empty_glob=false")
+        Options.parse(BuildLanguageOptions.class, "--incompatible_disallow_empty_glob=false")
             .getOptions(),
         rootDirectory);
 
@@ -1006,7 +1006,7 @@
   @Test
   public void testGlobDisallowEmpty_starlarkOption_wasNonEmptyAndBecomesEmpty() throws Exception {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.parse(StarlarkSemanticsOptions.class, "--incompatible_disallow_empty_glob=true")
+        Options.parse(BuildLanguageOptions.class, "--incompatible_disallow_empty_glob=true")
             .getOptions(),
         rootDirectory);
 
@@ -1065,7 +1065,7 @@
   @Test
   public void testGlobDisallowEmpty_starlarkOption_wasEmptyAndStaysEmpty() throws Exception {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.parse(StarlarkSemanticsOptions.class, "--incompatible_disallow_empty_glob=true")
+        Options.parse(BuildLanguageOptions.class, "--incompatible_disallow_empty_glob=true")
             .getOptions(),
         rootDirectory);
 
@@ -1129,7 +1129,7 @@
   public void testGlobDisallowEmpty_starlarkOption_wasEmptyDueToExcludeAndStaysEmpty()
       throws Exception {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.parse(StarlarkSemanticsOptions.class, "--incompatible_disallow_empty_glob=true")
+        Options.parse(BuildLanguageOptions.class, "--incompatible_disallow_empty_glob=true")
             .getOptions(),
         rootDirectory);
 
@@ -1190,7 +1190,7 @@
   @Test
   public void testGlobDisallowEmpty_starlarkOption_wasEmptyAndBecomesNonEmpty() throws Exception {
     preparePackageLoadingWithCustomStarklarkSemanticsOptions(
-        Options.parse(StarlarkSemanticsOptions.class, "--incompatible_disallow_empty_glob=true")
+        Options.parse(BuildLanguageOptions.class, "--incompatible_disallow_empty_glob=true")
             .getOptions(),
         rootDirectory);
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
index 5f706a3..bcd67b9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.packages.PackageFactory;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
@@ -104,7 +104,7 @@
             ImmutableList.of(Root.fromPath(rootDirectory)),
             BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
         Options.getDefaults(PackageOptions.class),
-        Options.getDefaults(StarlarkSemanticsOptions.class),
+        Options.getDefaults(BuildLanguageOptions.class),
         UUID.randomUUID(),
         ImmutableMap.<String, String>of(),
         new TimestampGranularityMonitor(null));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
index 1aaae8f..887cc96 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.EventKind;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
@@ -427,7 +427,7 @@
                 ImmutableList.of(Root.fromPath(rootDirectory)),
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
             packageOptions,
-            Options.getDefaults(StarlarkSemanticsOptions.class),
+            Options.getDefaults(BuildLanguageOptions.class),
             UUID.randomUUID(),
             ImmutableMap.<String, String>of(),
             new TimestampGranularityMonitor(BlazeClock.instance()));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java b/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
index 5242b21..2d872f3 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
@@ -170,7 +170,7 @@
                 ImmutableList.of(Root.fromPath(rootDirectory)),
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY),
             packageOptions,
-            Options.getDefaults(StarlarkSemanticsOptions.class),
+            Options.getDefaults(BuildLanguageOptions.class),
             UUID.randomUUID(),
             ImmutableMap.<String, String>of(),
             new TimestampGranularityMonitor(BlazeClock.instance()));
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
index d1c9f1a..3de30c9 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
@@ -174,7 +174,7 @@
     // Required since we have a new WORKSPACE file.
     invalidatePackages(true);
 
-    setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
+    setBuildLanguageOptions("--experimental_sibling_repository_layout");
 
     ConfiguredTarget myTarget = getConfiguredTarget("@r//:t");
     String result = (String) getMyInfoFromTarget(myTarget).getValue("result");
@@ -270,7 +270,7 @@
         "  myrule(name='a')",
         "");
     scratch.file("mypkg/BUILD", "load(':inc.bzl', 'f')", "f(name='foo')");
-    setStarlarkSemanticsOptions("--record_rule_instantiation_callstack");
+    setBuildLanguageOptions("--record_rule_instantiation_callstack");
     Rule rule = (Rule) getTarget("//mypkg:a");
     assertThat(rule.getAttr("generator_function")).isEqualTo("f");
     assertThat(rule.getAttr("generator_location")).isEqualTo("mypkg/BUILD:2:2");
@@ -659,7 +659,7 @@
 
   @Test
   public void testCannotSpecifyRunfilesWithDataOrDefaultRunfiles_struct() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -728,7 +728,7 @@
 
   @Test
   public void testInstrumentedFilesProviderWithCodeCoverageDisabled() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -761,7 +761,7 @@
 
   @Test
   public void testInstrumentedFilesProviderWithCodeCoverageEnabled() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -795,7 +795,7 @@
 
   @Test
   public void testInstrumentedFilesInfo_coverageDisabled() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -2673,7 +2673,7 @@
         "load('//test:rules.bzl', 'my_rule', 'simple_rule')",
         "my_rule(name = 'my_rule', dep = ':dep')",
         "simple_rule(name = 'dep')");
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:my_rule");
@@ -2682,7 +2682,7 @@
 
   @Test
   public void testPrintFromTransitionImpl() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions");
     scratch.file(
         "tools/allowlists/function_transition_allowlist/BUILD",
         "package_group(",
@@ -2734,7 +2734,7 @@
 
   @Test
   public void testTransitionEquality() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions");
     scratch.file(
         "tools/allowlists/function_transition_allowlist/BUILD",
         "package_group(",
@@ -2823,7 +2823,7 @@
         "load('//test:rules.bzl', 'my_rule', 'simple_rule')",
         "my_rule(name = 'my_rule', dep = ':dep')",
         "simple_rule(name = 'dep')");
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:my_rule");
@@ -2835,7 +2835,7 @@
     // Note that attr.license is deprecated, and thus this test is subject to imminent removal.
     // (See --incompatible_no_attr_license). However, this verifies that until the attribute
     // is removed, values of the attribute are a valid Starlark type.
-    setStarlarkSemanticsOptions("--incompatible_no_attr_license=false");
+    setBuildLanguageOptions("--incompatible_no_attr_license=false");
     scratch.file(
         "test/rule.bzl",
         "def _my_rule_impl(ctx): ",
@@ -2874,7 +2874,7 @@
 
   @Test
   public void testDisallowStructProviderSyntax() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=true");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=true");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -2897,7 +2897,7 @@
 
   @Test
   public void testDisableTargetProviderFields() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
+    setBuildLanguageOptions("--incompatible_disable_target_provider_fields=true");
     scratch.file(
         "test/starlark/rule.bzl",
         "MyProvider = provider()",
@@ -2933,7 +2933,7 @@
   // --incompatible_disable_target_provider_fields.
   @Test
   public void testDisableTargetProviderFields_actionsField() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
+    setBuildLanguageOptions("--incompatible_disable_target_provider_fields=true");
     scratch.file(
         "test/starlark/rule.bzl",
         "MyProvider = provider()",
@@ -2961,7 +2961,7 @@
 
   @Test
   public void testDisableTargetProviderFields_disabled() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=false");
+    setBuildLanguageOptions("--incompatible_disable_target_provider_fields=false");
     scratch.file(
         "test/starlark/rule.bzl",
         "MyProvider = provider()",
@@ -2989,7 +2989,7 @@
 
   @Test
   public void testNoRuleOutputsParam() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_no_rule_outputs_param=true");
+    setBuildLanguageOptions("--incompatible_no_rule_outputs_param=true");
     scratch.file(
         "test/starlark/test_rule.bzl",
         "def _impl(ctx):",
@@ -3013,7 +3013,7 @@
 
   @Test
   public void testExecutableNotInRunfiles() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/test_rule.bzl",
         "def _my_rule_impl(ctx):",
@@ -3035,7 +3035,7 @@
 
   @Test
   public void testCommandStringList() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_run_shell_command_string");
+    setBuildLanguageOptions("--incompatible_run_shell_command_string");
     scratch.file(
         "test/starlark/test_rule.bzl",
         "def _my_rule_impl(ctx):",
@@ -3132,7 +3132,7 @@
 
   @Test
   public void testUnknownStringEscapesForbidden() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_restrict_string_escapes=true");
+    setBuildLanguageOptions("--incompatible_restrict_string_escapes=true");
 
     scratch.file("test/extension.bzl", "y = \"\\z\"");
 
@@ -3145,7 +3145,7 @@
 
   @Test
   public void testUnknownStringEscapes() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_restrict_string_escapes=false");
+    setBuildLanguageOptions("--incompatible_restrict_string_escapes=false");
 
     scratch.file("test/extension.bzl", "y = \"\\z\"");
 
@@ -3340,7 +3340,7 @@
 
   @Test
   public void testLegacyProvider_addCanonicalLegacyKeyAndModernKey() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -3368,7 +3368,7 @@
 
   @Test
   public void testLegacyProvider_dontAutomaticallyAddKeysAlreadyPresent() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -3397,7 +3397,7 @@
 
   @Test
   public void testLegacyProvider_firstNoncanonicalKeyBecomesCanonical() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/starlark/extension.bzl",
         "def custom_rule_impl(ctx):",
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java
index 6776120..b21f773 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java
@@ -85,8 +85,8 @@
   }
 
   @Override
-  protected void setStarlarkSemanticsOptions(String... options) throws Exception {
-    super.setStarlarkSemanticsOptions(options); // for BuildViewTestCase
+  protected void setBuildLanguageOptions(String... options) throws Exception {
+    super.setBuildLanguageOptions(options); // for BuildViewTestCase
     ev.setSemantics(options); // for StarlarkThread
   }
 
@@ -1769,7 +1769,7 @@
 
   @Test
   public void testRuleAddExecGroup() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
+    setBuildLanguageOptions("--experimental_exec_groups=true");
 
     registerDummyStarlarkFunction();
     scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')");
@@ -1829,7 +1829,7 @@
 
   @Test
   public void testCreateExecGroup() throws Exception {
-    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
+    setBuildLanguageOptions("--experimental_exec_groups=true");
 
     scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')");
     evalAndExport(
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleContextTest.java
index eebb9ee..7143370 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleContextTest.java
@@ -231,7 +231,7 @@
 
   @Test
   public void testMandatoryProvidersListWithStarlark() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/BUILD",
         "load('//test:rules.bzl', 'starlark_rule', 'my_rule', 'my_other_rule')",
@@ -274,7 +274,7 @@
 
   @Test
   public void testMandatoryProvidersListWithNative() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/BUILD",
         "load('//test:rules.bzl', 'my_rule', 'my_other_rule')",
@@ -918,7 +918,7 @@
 
   @Test
   public void testDeriveArtifactLegacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setBuildLanguageOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result = ev.eval("ruleContext.new_file(ruleContext.genfiles_dir," + "  'a/b.txt')");
     PathFragment fragment = ((Artifact) result).getRootRelativePath();
@@ -965,7 +965,7 @@
 
   @Test
   public void testParamFileLegacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setBuildLanguageOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result =
         ev.eval(
@@ -976,7 +976,7 @@
 
   @Test
   public void testParamFileSuffixLegacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setBuildLanguageOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result =
         ev.eval(
@@ -1191,7 +1191,7 @@
 
   @Test
   public void testLabelKeyedStringDictAllowsRulesWithRequiredProviders_legacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "my_rule.bzl",
         "def _impl(ctx):",
@@ -1609,7 +1609,7 @@
 
   @Test
   public void testAccessingRunfilesSymlinks_legacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/a.py");
     scratch.file("test/b.py");
     scratch.file(
@@ -1702,7 +1702,7 @@
 
   @Test
   public void testAccessingRunfilesRootSymlinks_legacy() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/a.py");
     scratch.file("test/b.py");
     scratch.file(
@@ -1919,7 +1919,7 @@
 
   @Test
   public void testAbstractActionInterface() throws Exception {
-    setStarlarkSemanticsOptions(
+    setBuildLanguageOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     scratch.file(
@@ -1964,7 +1964,7 @@
 
   @Test
   public void testCreatedActions() throws Exception {
-    setStarlarkSemanticsOptions(
+    setBuildLanguageOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     // createRuleContext() gives us the context for a rule upon entry into its analysis function.
@@ -2050,7 +2050,7 @@
 
   @Test
   public void testRunShellUsesHelperScriptForLongCommand() throws Exception {
-    setStarlarkSemanticsOptions(
+    setBuildLanguageOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     // createRuleContext() gives us the context for a rule upon entry into its analysis function.
@@ -2427,7 +2427,7 @@
 
   @Test
   public void testFrozenRuleContextHasInaccessibleAttributes() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setBuildLanguageOptions("--incompatible_new_actions_api=false");
     scratch.file(
         "test/BUILD",
         "load('//test:rules.bzl', 'main_rule', 'dep_rule')",
@@ -2500,7 +2500,7 @@
           "    'deps': attr.label_list(aspects = [MyAspect])",
           "  },",
           ")");
-      setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
+      setBuildLanguageOptions("--incompatible_new_actions_api=false");
       invalidatePackages();
 
       AssertionError e =
@@ -2549,7 +2549,7 @@
           "  },",
           "  outputs = {'file': 'output.txt'},",
           ")");
-      setStarlarkSemanticsOptions("--incompatible_new_actions_api=true");
+      setBuildLanguageOptions("--incompatible_new_actions_api=true");
       invalidatePackages();
       AssertionError e =
           assertThrows(
@@ -2839,7 +2839,7 @@
         "something/BUILD",
         "load('//something:defs.bzl', 'use_exec_groups')",
         "use_exec_groups(name = 'nectarine')");
-    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
+    setBuildLanguageOptions("--experimental_exec_groups=true");
     useConfiguration(
         "--extra_toolchains=//toolchain:foo_toolchain,//toolchain:bar_toolchain",
         "--platforms=//platform:platform_1");
@@ -2900,7 +2900,7 @@
         "constraint_value(name = 'extra', constraint_setting = ':setting')",
         "load('//something:defs.bzl', 'use_exec_groups')",
         "use_exec_groups(name = 'nectarine')");
-    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
+    setBuildLanguageOptions("--experimental_exec_groups=true");
     useConfiguration(
         "--extra_toolchains=//toolchain:foo_toolchain,//toolchain:bar_toolchain",
         "--platforms=//platform:platform_1");
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
index f2c1688..cd853e1 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
@@ -1149,7 +1149,7 @@
 
   @Test
   public void testDefaultProviderInvalidConfiguration() throws Exception {
-    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setBuildLanguageOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/foo.bzl",
         "foo_provider = provider()",
@@ -2508,7 +2508,7 @@
 
     scratch.file("test/BUILD", "load('//test:rule.bzl', 'foo')", "foo(name='foo')");
 
-    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setBuildLanguageOptions("--experimental_starlark_config_transitions=true");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:foo");
@@ -2549,7 +2549,7 @@
         "    '_attr': attr.label(",
         "        cfg = android_common.multi_cpu_configuration,",
         "        default = configuration_field(fragment='cpp', name = 'cc_toolchain'))})");
-    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
+    setBuildLanguageOptions("--experimental_google_legacy_api");
 
     scratch.file("test/BUILD", "load('//test:rule.bzl', 'foo')", "foo(name='foo')");
 
@@ -3049,7 +3049,7 @@
             "args.add_all([directory], map_each=_path)");
 
     ev.setSemantics("--incompatible_run_shell_command_string");
-    // setStarlarkSemanticsOptions reinitializes the thread -- set the ruleContext on the new one.
+    // setBuildLanguageOptions reinitializes the thread -- set the ruleContext on the new one.
     setRuleContext(createRuleContext("//foo:foo"));
 
     CommandLine commandLine2 =
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/util/BUILD b/src/test/java/com/google/devtools/build/lib/starlark/util/BUILD
index 4effb55..f475852 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/starlark/util/BUILD
@@ -23,7 +23,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/rules/platform",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/util/StarlarkOptionsTestCase.java b/src/test/java/com/google/devtools/build/lib/starlark/util/StarlarkOptionsTestCase.java
index ff4b909..e98c540 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/util/StarlarkOptionsTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/util/StarlarkOptionsTestCase.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.events.StoredEventHandler;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.LoadingOptions;
 import com.google.devtools.build.lib.pkgcache.PackageOptions;
 import com.google.devtools.build.lib.runtime.ClientOptions;
@@ -40,7 +40,7 @@
   private static final List<Class<? extends OptionsBase>> requiredOptionsClasses =
       ImmutableList.of(
           PackageOptions.class,
-          StarlarkSemanticsOptions.class,
+          BuildLanguageOptions.class,
           KeepGoingOption.class,
           LoadingOptions.class,
           ClientOptions.class,
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/util/BUILD b/src/test/java/com/google/devtools/build/lib/syntax/util/BUILD
index 50f167a..6d594b8 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/syntax/util/BUILD
@@ -15,7 +15,7 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
-        "//src/main/java/com/google/devtools/build/lib/packages:starlark_semantics_options",
+        "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/common/options",
         "//src/test/java/com/google/devtools/build/lib/events:testutil",
         "//third_party:guava",
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
index 5a3eade..f8247fc 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
@@ -22,7 +22,7 @@
 import com.google.devtools.build.lib.events.EventKind;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.events.util.EventCollectionApparatus;
-import com.google.devtools.build.lib.packages.StarlarkSemanticsOptions;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Expression;
 import com.google.devtools.build.lib.syntax.FileOptions;
@@ -74,7 +74,7 @@
    */
   public final void setSemantics(String... options) throws OptionsParsingException {
     this.semantics =
-        Options.parse(StarlarkSemanticsOptions.class, options).getOptions().toStarlarkSemantics();
+        Options.parse(BuildLanguageOptions.class, options).getOptions().toStarlarkSemantics();
 
     // Re-initialize the thread and module with the new semantics when needed.
     this.thread = null;
