diff --git a/pkgs/c_compiler/lib/c_compiler.dart b/pkgs/c_compiler/lib/c_compiler.dart
index c2945a9c1a..f6f90d188b 100644
--- a/pkgs/c_compiler/lib/c_compiler.dart
+++ b/pkgs/c_compiler/lib/c_compiler.dart
@@ -6,11 +6,3 @@
 library;
 
 export 'src/cbuilder/cbuilder.dart';
-export 'src/native_toolchain/android_ndk.dart';
-export 'src/native_toolchain/apple_clang.dart';
-export 'src/native_toolchain/clang.dart';
-export 'src/native_toolchain/gcc.dart';
-export 'src/tool/tool.dart';
-export 'src/tool/tool_instance.dart';
-export 'src/tool/tool_requirement.dart';
-export 'src/tool/tool_resolver.dart';
diff --git a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart
index 7ab60c9a27..2d98481bd7 100644
--- a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart
+++ b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart
@@ -74,9 +74,9 @@ class CBuilder implements Builder {
     final outDir = buildConfig.outDir;
     final packageRoot = buildConfig.packageRoot;
     await Directory.fromUri(outDir).create(recursive: true);
-    final packaging = buildConfig.packaging.preferredPackaging.first;
+    final linkMode = buildConfig.linkModePreference.preferredLinkMode;
     final libUri =
-        outDir.resolve(buildConfig.target.os.libraryFileName(name, packaging));
+        outDir.resolve(buildConfig.target.os.libraryFileName(name, linkMode));
     final exeUri =
         outDir.resolve(buildConfig.target.os.executableFileName(name));
     final sources = [
@@ -92,11 +92,11 @@ class CBuilder implements Builder {
       logger: logger,
       sources: sources,
       dynamicLibrary:
-          _type == _CBuilderType.library && packaging == Packaging.dynamic
+          _type == _CBuilderType.library && linkMode == LinkMode.dynamic
               ? libUri
               : null,
       staticLibrary:
-          _type == _CBuilderType.library && packaging == Packaging.static
+          _type == _CBuilderType.library && linkMode == LinkMode.static
               ? libUri
               : null,
       executable: _type == _CBuilderType.executable ? exeUri : null,
@@ -106,7 +106,7 @@ class CBuilder implements Builder {
     if (assetName != null) {
       buildOutput.assets.add(Asset(
         name: assetName!,
-        packaging: packaging,
+        linkMode: linkMode,
         target: buildConfig.target,
         path: AssetAbsolutePath(libUri),
       ));
diff --git a/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart
index 9506ecdc0b..7d108d3e06 100644
--- a/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart
+++ b/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart
@@ -5,9 +5,12 @@
 import 'package:logging/logging.dart';
 import 'package:native_assets_cli/native_assets_cli.dart';
 
-import '../../c_compiler.dart';
+import '../native_toolchain/apple_clang.dart';
+import '../native_toolchain/clang.dart';
+import '../native_toolchain/gcc.dart';
 import '../native_toolchain/msvc.dart';
 import '../native_toolchain/xcode.dart';
+import '../tool/tool_instance.dart';
 import '../utils/env_from_bat.dart';
 import '../utils/run_process.dart';
 import 'compiler_resolver.dart';
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart
index 27ebf9163a..967b98f638 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart
@@ -33,9 +33,9 @@ void main() {
     Target.androidX64: 'elf64-x86-64',
   };
 
-  for (final packaging in Packaging.values) {
+  for (final linkMode in LinkMode.values) {
     for (final target in targets) {
-      test('Cbuilder $packaging library $target', () async {
+      test('Cbuilder $linkMode library $target', () async {
         await inTempDir((tempUri) async {
           final addCUri =
               packageUri.resolve('test/cbuilder/testfiles/add/src/add.c');
@@ -45,9 +45,9 @@ void main() {
             outDir: tempUri,
             packageRoot: tempUri,
             target: target,
-            packaging: packaging == Packaging.dynamic
-                ? PackagingPreference.dynamic
-                : PackagingPreference.static,
+            linkModePreference: linkMode == LinkMode.dynamic
+                ? LinkModePreference.dynamic
+                : LinkModePreference.static,
           );
           final buildOutput = BuildOutput();
 
@@ -63,7 +63,7 @@ void main() {
           );
 
           final libUri =
-              tempUri.resolve(target.os.libraryFileName(name, packaging));
+              tempUri.resolve(target.os.libraryFileName(name, linkMode));
           if (Platform.isLinux) {
             final result = await runProcess(
               executable: Uri.file('readelf'),
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart
index dd3c583f4f..7fb1e6a39e 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart
@@ -29,10 +29,10 @@ void main() {
     Target.iOSArm64: 'arm64',
   };
 
-  for (final packaging in Packaging.values) {
+  for (final linkMode in LinkMode.values) {
     for (final targetIOSSdk in IOSSdk.values) {
       for (final target in targets) {
-        test('Cbuilder $packaging library $targetIOSSdk $target', () async {
+        test('Cbuilder $linkMode library $targetIOSSdk $target', () async {
           await inTempDir((tempUri) async {
             final addCUri =
                 packageUri.resolve('test/cbuilder/testfiles/add/src/add.c');
@@ -42,9 +42,9 @@ void main() {
               outDir: tempUri,
               packageRoot: tempUri,
               target: target,
-              packaging: packaging == Packaging.dynamic
-                  ? PackagingPreference.dynamic
-                  : PackagingPreference.static,
+              linkModePreference: linkMode == LinkMode.dynamic
+                  ? LinkModePreference.dynamic
+                  : LinkModePreference.static,
               targetIOSSdk: targetIOSSdk,
             );
             final buildOutput = BuildOutput();
@@ -61,7 +61,7 @@ void main() {
             );
 
             final libUri =
-                tempUri.resolve(target.os.libraryFileName(name, packaging));
+                tempUri.resolve(target.os.libraryFileName(name, linkMode));
             final result = await runProcess(
               executable: Uri.file('objdump'),
               arguments: ['-t', libUri.path],
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart
index a197fb99fe..9a4f34a723 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart
@@ -34,9 +34,9 @@ void main() {
     Target.linuxX64: 'Advanced Micro Devices X86-64',
   };
 
-  for (final packaging in Packaging.values) {
+  for (final linkMode in LinkMode.values) {
     for (final target in targets) {
-      test('Cbuilder $packaging library $target', () async {
+      test('Cbuilder $linkMode library $target', () async {
         await inTempDir((tempUri) async {
           final addCUri =
               packageUri.resolve('test/cbuilder/testfiles/add/src/add.c');
@@ -46,9 +46,9 @@ void main() {
             outDir: tempUri,
             packageRoot: tempUri,
             target: target,
-            packaging: packaging == Packaging.dynamic
-                ? PackagingPreference.dynamic
-                : PackagingPreference.static,
+            linkModePreference: linkMode == LinkMode.dynamic
+                ? LinkModePreference.dynamic
+                : LinkModePreference.static,
           );
           final buildOutput = BuildOutput();
 
@@ -64,7 +64,7 @@ void main() {
           );
 
           final libUri =
-              tempUri.resolve(target.os.libraryFileName(name, packaging));
+              tempUri.resolve(target.os.libraryFileName(name, linkMode));
           final result = await runProcess(
             executable: Uri.file('readelf'),
             arguments: ['-h', libUri.path],
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart
index e71cf286d3..b3d6ea8a57 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart
@@ -31,9 +31,9 @@ void main() {
     Target.macOSX64: '64-bit x86-64',
   };
 
-  for (final packaging in Packaging.values) {
+  for (final linkMode in LinkMode.values) {
     for (final target in targets) {
-      test('Cbuilder $packaging library $target', () async {
+      test('Cbuilder $linkMode library $target', () async {
         await inTempDir((tempUri) async {
           final addCUri =
               packageUri.resolve('test/cbuilder/testfiles/add/src/add.c');
@@ -43,9 +43,9 @@ void main() {
             outDir: tempUri,
             packageRoot: tempUri,
             target: target,
-            packaging: packaging == Packaging.dynamic
-                ? PackagingPreference.dynamic
-                : PackagingPreference.static,
+            linkModePreference: linkMode == LinkMode.dynamic
+                ? LinkModePreference.dynamic
+                : LinkModePreference.static,
           );
           final buildOutput = BuildOutput();
 
@@ -61,7 +61,7 @@ void main() {
           );
 
           final libUri =
-              tempUri.resolve(target.os.libraryFileName(name, packaging));
+              tempUri.resolve(target.os.libraryFileName(name, linkMode));
           final result = await runProcess(
             executable: Uri.file('objdump'),
             arguments: ['-t', libUri.path],
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart
index 3a4cde0b90..5112d3936b 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart
@@ -40,13 +40,13 @@ void main() {
   };
 
   const dumpbinFileType = {
-    Packaging.dynamic: 'DLL',
-    Packaging.static: 'LIBRARY',
+    LinkMode.dynamic: 'DLL',
+    LinkMode.static: 'LIBRARY',
   };
 
-  for (final packaging in Packaging.values) {
+  for (final linkMode in LinkMode.values) {
     for (final target in targets) {
-      test('Cbuilder $packaging library $target', timeout: Timeout.factor(2),
+      test('Cbuilder $linkMode library $target', timeout: Timeout.factor(2),
           () async {
         await inTempDir((tempUri) async {
           final addCUri =
@@ -57,9 +57,9 @@ void main() {
             outDir: tempUri,
             packageRoot: tempUri,
             target: target,
-            packaging: packaging == Packaging.dynamic
-                ? PackagingPreference.dynamic
-                : PackagingPreference.static,
+            linkModePreference: linkMode == LinkMode.dynamic
+                ? LinkModePreference.dynamic
+                : LinkModePreference.static,
           );
           final buildOutput = BuildOutput();
 
@@ -75,7 +75,7 @@ void main() {
           );
 
           final libUri =
-              tempUri.resolve(target.os.libraryFileName(name, packaging));
+              tempUri.resolve(target.os.libraryFileName(name, linkMode));
           expect(await File.fromUri(libUri).exists(), true);
           final result = await runProcess(
             executable: dumpbinUri,
@@ -90,7 +90,7 @@ void main() {
           final fileType = result.stdout
               .split('\n')
               .firstWhere((e) => e.contains('File Type'));
-          expect(fileType, contains(dumpbinFileType[packaging]));
+          expect(fileType, contains(dumpbinFileType[linkMode]));
         });
       });
     }
diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart
index cabf8e1301..8c70e45a84 100644
--- a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart
@@ -29,7 +29,8 @@ void main() {
         outDir: tempUri,
         packageRoot: tempUri,
         target: Target.current,
-        packaging: PackagingPreference.dynamic, // Ignored by executables.
+        linkModePreference:
+            LinkModePreference.dynamic, // Ignored by executables.
         cc: cc,
         toolchainEnvScript: toolchainEnvScript,
         toolchainEnvScriptArgs: toolchainEnvScriptArgs,
@@ -70,7 +71,7 @@ void main() {
           outDir: tempUri,
           packageRoot: tempUri,
           target: Target.current,
-          packaging: PackagingPreference.dynamic,
+          linkModePreference: LinkModePreference.dynamic,
           cc: cc,
           toolchainEnvScript: toolchainEnvScript,
           toolchainEnvScriptArgs: toolchainEnvScriptArgs,
diff --git a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart
index 5dae0159bb..daa84cadaf 100644
--- a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart
+++ b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart
@@ -5,8 +5,9 @@
 @OnPlatform({'windows': Timeout.factor(10)})
 library;
 
-import 'package:c_compiler/c_compiler.dart';
 import 'package:c_compiler/src/cbuilder/compiler_resolver.dart';
+import 'package:c_compiler/src/native_toolchain/apple_clang.dart';
+import 'package:c_compiler/src/native_toolchain/clang.dart';
 import 'package:c_compiler/src/native_toolchain/msvc.dart';
 import 'package:c_compiler/src/tool/tool_error.dart';
 import 'package:collection/collection.dart';
@@ -40,7 +41,7 @@ void main() {
         outDir: tempUri,
         packageRoot: tempUri,
         target: Target.current,
-        packaging: PackagingPreference.dynamic,
+        linkModePreference: LinkModePreference.dynamic,
         ar: ar,
         cc: cc,
         ld: ld,
@@ -61,7 +62,7 @@ void main() {
         outDir: tempUri,
         packageRoot: tempUri,
         target: Target.windowsX64,
-        packaging: PackagingPreference.dynamic,
+        linkModePreference: LinkModePreference.dynamic,
       );
       final resolver = CompilerResolver(
         buildConfig: buildConfig,
diff --git a/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart b/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart
index 3493a20d79..184e017fa3 100644
--- a/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart
+++ b/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart
@@ -7,7 +7,8 @@ library;
 
 import 'dart:io';
 
-import 'package:c_compiler/c_compiler.dart';
+import 'package:c_compiler/src/native_toolchain/apple_clang.dart';
+import 'package:c_compiler/src/tool/tool_requirement.dart';
 import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 
diff --git a/pkgs/c_compiler/test/tool/tool_instance_test.dart b/pkgs/c_compiler/test/tool/tool_instance_test.dart
index 4a82ef62de..abde1551db 100644
--- a/pkgs/c_compiler/test/tool/tool_instance_test.dart
+++ b/pkgs/c_compiler/test/tool/tool_instance_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:c_compiler/c_compiler.dart';
+import 'package:c_compiler/src/tool/tool.dart';
+import 'package:c_compiler/src/tool/tool_instance.dart';
 import 'package:collection/collection.dart';
 import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
diff --git a/pkgs/c_compiler/test/tool/tool_resolver_test.dart b/pkgs/c_compiler/test/tool/tool_resolver_test.dart
index 7c7fa89b1e..d54804d355 100644
--- a/pkgs/c_compiler/test/tool/tool_resolver_test.dart
+++ b/pkgs/c_compiler/test/tool/tool_resolver_test.dart
@@ -4,9 +4,13 @@
 
 import 'dart:io';
 
-import 'package:c_compiler/c_compiler.dart';
+import 'package:c_compiler/src/native_toolchain/apple_clang.dart';
+import 'package:c_compiler/src/native_toolchain/clang.dart';
 import 'package:c_compiler/src/native_toolchain/msvc.dart';
+import 'package:c_compiler/src/tool/tool.dart';
 import 'package:c_compiler/src/tool/tool_error.dart';
+import 'package:c_compiler/src/tool/tool_instance.dart';
+import 'package:c_compiler/src/tool/tool_resolver.dart';
 import 'package:native_assets_cli/native_assets_cli.dart';
 import 'package:test/test.dart';
 
diff --git a/pkgs/native_assets_cli/lib/native_assets_cli.dart b/pkgs/native_assets_cli/lib/native_assets_cli.dart
index 2986e641ef..b23ff3a2c1 100644
--- a/pkgs/native_assets_cli/lib/native_assets_cli.dart
+++ b/pkgs/native_assets_cli/lib/native_assets_cli.dart
@@ -11,7 +11,7 @@ export 'src/model/build_config.dart';
 export 'src/model/build_output.dart';
 export 'src/model/dependencies.dart';
 export 'src/model/ios_sdk.dart';
+export 'src/model/link_mode.dart';
+export 'src/model/link_mode_preference.dart';
 export 'src/model/metadata.dart';
-export 'src/model/packaging.dart';
-export 'src/model/packaging_preference.dart';
 export 'src/model/target.dart';
diff --git a/pkgs/native_assets_cli/lib/src/model/asset.dart b/pkgs/native_assets_cli/lib/src/model/asset.dart
index 265e3a785b..736511fe4f 100644
--- a/pkgs/native_assets_cli/lib/src/model/asset.dart
+++ b/pkgs/native_assets_cli/lib/src/model/asset.dart
@@ -6,7 +6,7 @@ import 'package:yaml/yaml.dart';
 
 import '../utils/uri.dart';
 import '../utils/yaml.dart';
-import 'packaging.dart';
+import 'link_mode.dart';
 import 'target.dart';
 
 abstract class AssetPath {
@@ -76,7 +76,7 @@ class AssetAbsolutePath implements AssetPath {
 
 /// Asset is avaliable on a relative path.
 ///
-/// If [Packaging] of an [Asset] is [Packaging.dynamic],
+/// If [LinkMode] of an [Asset] is [LinkMode.dynamic],
 /// `Platform.script.resolve(uri)` will be used to load the asset at runtime.
 class AssetRelativePath implements AssetPath {
   final Uri uri;
@@ -190,14 +190,14 @@ class AssetInExecutable implements AssetPath {
 }
 
 class Asset {
-  final Packaging packaging;
+  final LinkMode linkMode;
   final String name;
   final Target target;
   final AssetPath path;
 
   Asset({
     required this.name,
-    required this.packaging,
+    required this.linkMode,
     required this.target,
     required this.path,
   });
@@ -206,7 +206,7 @@ class Asset {
         name: yamlMap[_nameKey] as String,
         path: AssetPath.fromYaml(yamlMap[_pathKey] as YamlMap),
         target: Target.fromString(yamlMap[_targetKey] as String),
-        packaging: Packaging.fromName(yamlMap[_packagingKey] as String),
+        linkMode: LinkMode.fromName(yamlMap[_linkModeKey] as String),
       );
 
   static List<Asset> listFromYamlString(String yaml) {
@@ -226,14 +226,14 @@ class Asset {
       ];
 
   Asset copyWith({
-    Packaging? packaging,
+    LinkMode? linkMode,
     String? name,
     Target? target,
     AssetPath? path,
   }) =>
       Asset(
         name: name ?? this.name,
-        packaging: packaging ?? this.packaging,
+        linkMode: linkMode ?? this.linkMode,
         target: target ?? this.target,
         path: path ?? this.path,
       );
@@ -244,17 +244,17 @@ class Asset {
       return false;
     }
     return other.name == name &&
-        other.packaging == packaging &&
+        other.linkMode == linkMode &&
         other.target == target &&
         other.path == path;
   }
 
   @override
-  int get hashCode => Object.hash(name, packaging, target, path);
+  int get hashCode => Object.hash(name, linkMode, target, path);
 
   Map<String, Object> toYaml() => {
         _nameKey: name,
-        _packagingKey: packaging.name,
+        _linkModeKey: linkMode.name,
         _pathKey: path.toYaml(),
         _targetKey: target.toString(),
       };
@@ -266,7 +266,7 @@ class Asset {
   String toYamlString() => yamlEncode(toYaml());
 
   static const _nameKey = 'name';
-  static const _packagingKey = 'packaging';
+  static const _linkModeKey = 'link_mode';
   static const _pathKey = 'path';
   static const _targetKey = 'target';
 
@@ -281,8 +281,8 @@ extension AssetIterable on Iterable<Asset> {
 
   String toYamlString() => yamlEncode(toYaml());
 
-  Iterable<Asset> wherePackaging(Packaging packaging) =>
-      where((e) => e.packaging == packaging);
+  Iterable<Asset> whereLinkMode(LinkMode linkMode) =>
+      where((e) => e.linkMode == linkMode);
 
   Map<Target, List<Asset>> get assetsPerTarget {
     final result = <Target, List<Asset>>{};
diff --git a/pkgs/native_assets_cli/lib/src/model/build_config.dart b/pkgs/native_assets_cli/lib/src/model/build_config.dart
index 2d648a6cf9..5fbe1344e1 100644
--- a/pkgs/native_assets_cli/lib/src/model/build_config.dart
+++ b/pkgs/native_assets_cli/lib/src/model/build_config.dart
@@ -8,8 +8,8 @@ import 'package:collection/collection.dart';
 import '../utils/map.dart';
 import '../utils/yaml.dart';
 import 'ios_sdk.dart';
+import 'link_mode_preference.dart';
 import 'metadata.dart';
-import 'packaging_preference.dart';
 import 'target.dart';
 
 class BuildConfig {
@@ -47,6 +47,10 @@ class BuildConfig {
   Uri? get ar => _ar;
   late final Uri? _ar;
 
+  /// Preferred linkMode method for library.
+  LinkModePreference get linkModePreference => _linkModePreference;
+  late final LinkModePreference _linkModePreference;
+
   /// Path to script that sets environment variables for [cc], [ld], and [ar].
   Uri? get toolchainEnvScript => _toolchainEnvScript;
   late final Uri? _toolchainEnvScript;
@@ -55,10 +59,6 @@ class BuildConfig {
   List<String>? get toolchainEnvScriptArgs => _toolchainEnvScriptArgs;
   late final List<String>? _toolchainEnvScriptArgs;
 
-  /// Preferred packaging method for library.
-  PackagingPreference get packaging => _packaging;
-  late final PackagingPreference _packaging;
-
   /// Metadata from direct dependencies.
   ///
   /// The key in the map is the package name of the dependency.
@@ -83,7 +83,7 @@ class BuildConfig {
     Uri? ld,
     Uri? toolchainEnvScript,
     List<String>? toolchainEnvScriptArgs,
-    required PackagingPreference packaging,
+    required LinkModePreference linkModePreference,
     Map<String, Metadata>? dependencyMetadata,
   }) {
     final nonValidated = BuildConfig._()
@@ -94,9 +94,9 @@ class BuildConfig {
       .._ar = ar
       .._cc = cc
       .._ld = ld
+      .._linkModePreference = linkModePreference
       .._toolchainEnvScript = toolchainEnvScript
       .._toolchainEnvScriptArgs = toolchainEnvScriptArgs
-      .._packaging = packaging
       .._dependencyMetadata = dependencyMetadata;
     final parsedConfigFile = nonValidated.toYaml();
     final config = Config(fileParsed: parsedConfigFile);
@@ -198,10 +198,10 @@ class BuildConfig {
             toolchainEnvScriptArgsConfigKey,
             splitEnvironmentPattern: ' ',
           ),
-      (config) => _packaging = PackagingPreference.fromString(
+      (config) => _linkModePreference = LinkModePreference.fromString(
             config.string(
-              PackagingPreference.configKey,
-              validValues: PackagingPreference.values.map((e) => '$e'),
+              LinkModePreference.configKey,
+              validValues: LinkModePreference.values.map((e) => '$e'),
             ),
           ),
       (config) =>
@@ -249,7 +249,7 @@ class BuildConfig {
           toolchainEnvScriptConfigKey: _toolchainEnvScript!.toFilePath(),
         if (_toolchainEnvScriptArgs != null)
           toolchainEnvScriptArgsConfigKey: _toolchainEnvScriptArgs!,
-        PackagingPreference.configKey: _packaging.toString(),
+        LinkModePreference.configKey: _linkModePreference.toString(),
         if (_dependencyMetadata != null)
           dependencyMetadataConfigKey: {
             for (final entry in _dependencyMetadata!.entries)
@@ -274,7 +274,7 @@ class BuildConfig {
     if (other.toolchainEnvScript != toolchainEnvScript) return false;
     if (!ListEquality<String>().equals(
         other.toolchainEnvScriptArgs, toolchainEnvScriptArgs)) return false;
-    if (other._packaging != _packaging) return false;
+    if (other._linkModePreference != _linkModePreference) return false;
     if (!DeepCollectionEquality()
         .equals(other._dependencyMetadata, _dependencyMetadata)) return false;
     return true;
@@ -291,7 +291,7 @@ class BuildConfig {
         _ld,
         _toolchainEnvScript,
         ListEquality<String>().hash(toolchainEnvScriptArgs),
-        _packaging,
+        _linkModePreference,
         DeepCollectionEquality().hash(_dependencyMetadata),
       );
 
diff --git a/pkgs/native_assets_cli/lib/src/model/packaging.dart b/pkgs/native_assets_cli/lib/src/model/link_mode.dart
similarity index 56%
rename from pkgs/native_assets_cli/lib/src/model/packaging.dart
rename to pkgs/native_assets_cli/lib/src/model/link_mode.dart
index 5cc734a4ae..a7f4d3d8e6 100644
--- a/pkgs/native_assets_cli/lib/src/model/packaging.dart
+++ b/pkgs/native_assets_cli/lib/src/model/link_mode.dart
@@ -2,21 +2,21 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-class Packaging {
+class LinkMode {
   final String name;
 
-  const Packaging._(this.name);
+  const LinkMode._(this.name);
 
-  static const Packaging dynamic = Packaging._('dynamic');
-  static const Packaging static = Packaging._('static');
+  static const LinkMode dynamic = LinkMode._('dynamic');
+  static const LinkMode static = LinkMode._('static');
 
-  /// Known values for [Packaging].
-  static const List<Packaging> values = [
+  /// Known values for [LinkMode].
+  static const List<LinkMode> values = [
     dynamic,
     static,
   ];
 
-  factory Packaging.fromName(String name) =>
+  factory LinkMode.fromName(String name) =>
       values.where((element) => element.name == name).first;
 
   @override
diff --git a/pkgs/native_assets_cli/lib/src/model/packaging_preference.dart b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart
similarity index 54%
rename from pkgs/native_assets_cli/lib/src/model/packaging_preference.dart
rename to pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart
index d4660ba2e0..89a72ce9df 100644
--- a/pkgs/native_assets_cli/lib/src/model/packaging_preference.dart
+++ b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart
@@ -2,63 +2,59 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'packaging.dart';
+import 'link_mode.dart';
 
-class PackagingPreference {
+class LinkModePreference {
   final String name;
   final String description;
-  final List<Packaging> preferredPackaging;
-  final List<Packaging> potentialPackaging;
+  final LinkMode preferredLinkMode;
+  final List<LinkMode> potentialLinkMode;
 
-  const PackagingPreference(
+  const LinkModePreference(
     this.name,
     this.description, {
-    required this.preferredPackaging,
-    required this.potentialPackaging,
+    required this.preferredLinkMode,
+    required this.potentialLinkMode,
   });
 
-  factory PackagingPreference.fromString(String name) =>
+  factory LinkModePreference.fromString(String name) =>
       values.where((element) => element.name == name).first;
 
-  static const dynamic = PackagingPreference(
+  static const dynamic = LinkModePreference(
     'dynamic',
     '''Provide native assets as dynamic libraries.
 Fails if not all native assets can only be provided as static library.
 Required to run Dart in JIT mode.''',
-    preferredPackaging: [Packaging.dynamic],
-    potentialPackaging: [Packaging.dynamic],
+    preferredLinkMode: LinkMode.dynamic,
+    potentialLinkMode: [LinkMode.dynamic],
   );
-  static const static = PackagingPreference(
+
+  static const static = LinkModePreference(
     'static',
     '''Provide native assets as static libraries.
 Fails if not all native assets can only be provided as dynamic library.
 Required for potential link-time tree-shaking of native code.
 Therefore, preferred to in Dart AOT mode.''',
-    preferredPackaging: [Packaging.static],
-    potentialPackaging: [Packaging.static],
+    preferredLinkMode: LinkMode.static,
+    potentialLinkMode: [LinkMode.static],
   );
-  static const preferDynamic = PackagingPreference(
+
+  static const preferDynamic = LinkModePreference(
     'prefer-dynamic',
     '''Provide native assets as dynamic libraries, if possible.
 Otherwise, build native assets as static libraries.''',
-    preferredPackaging: [Packaging.dynamic],
-    potentialPackaging: Packaging.values,
+    preferredLinkMode: LinkMode.dynamic,
+    potentialLinkMode: LinkMode.values,
   );
-  static const preferStatic = PackagingPreference(
+
+  static const preferStatic = LinkModePreference(
     'prefer-static',
     '''Provide native assets as static libraries, if possible.
 Otherwise, build native assets as dynamic libraries.
 Preferred for AOT compilation, if there are any native assets which can only be
 provided as dynamic libraries.''',
-    preferredPackaging: [Packaging.static],
-    potentialPackaging: Packaging.values,
-  );
-  static const all = PackagingPreference(
-    'all',
-    '''Provide native assets as both dynamic and static libraries if supported.
-Mostly useful for testing the build scripts.''',
-    preferredPackaging: Packaging.values,
-    potentialPackaging: Packaging.values,
+    preferredLinkMode: LinkMode.static,
+    potentialLinkMode: LinkMode.values,
   );
 
   static const values = [
@@ -66,11 +62,10 @@ Mostly useful for testing the build scripts.''',
     static,
     preferDynamic,
     preferStatic,
-    all,
   ];
 
   /// The `package:config` key preferably used.
-  static const String configKey = 'packaging';
+  static const String configKey = 'link_mode_preference';
 
   @override
   String toString() => name;
diff --git a/pkgs/native_assets_cli/lib/src/model/target.dart b/pkgs/native_assets_cli/lib/src/model/target.dart
index c9d0c204b4..341e358cbe 100644
--- a/pkgs/native_assets_cli/lib/src/model/target.dart
+++ b/pkgs/native_assets_cli/lib/src/model/target.dart
@@ -5,7 +5,7 @@
 import 'dart:ffi' show Abi;
 import 'dart:io';
 
-import 'packaging.dart';
+import 'link_mode.dart';
 
 /// The hardware architectures the Dart VM runs on.
 class Architecture {
@@ -106,13 +106,6 @@ class OS {
     Abi.windowsX64: OS.windows,
   };
 
-  /// Whether the [OS] is a OS for mobile devices.
-  bool get isMobile => this == OS.android || this == OS.iOS;
-
-  /// Whether the [OS] is a OS for desktop devices.
-  bool get isDesktop =>
-      this == OS.linux || this == OS.macOS || this == OS.windows;
-
   /// Typical cross compilation between OSes.
   static const _osCrossCompilationDefault = {
     OS.macOS: [OS.macOS, OS.iOS, OS.android],
@@ -134,11 +127,11 @@ class OS {
     return '$prefix$name.$extension';
   }
 
-  String libraryFileName(String name, Packaging packaging) {
-    if (packaging == Packaging.dynamic) {
+  String libraryFileName(String name, LinkMode linkMode) {
+    if (linkMode == LinkMode.dynamic) {
       return dylibFileName(name);
     }
-    assert(packaging == Packaging.static);
+    assert(linkMode == LinkMode.static);
     return staticlibFileName(name);
   }
 
diff --git a/pkgs/native_assets_cli/test/example/native_add_test.dart b/pkgs/native_assets_cli/test/example/native_add_test.dart
index 7e0f355b47..17442fcdf7 100644
--- a/pkgs/native_assets_cli/test/example/native_add_test.dart
+++ b/pkgs/native_assets_cli/test/example/native_add_test.dart
@@ -33,7 +33,7 @@ void main() async {
         '-Dout_dir=${tempUri.toFilePath()}',
         '-Dpackage_root=${testPackageUri.toFilePath()}',
         '-Dtarget=${Target.current}',
-        '-Dpackaging=dynamic',
+        '-Dlink_mode_preference=dynamic',
         if (cc != null) '-Dcc=${cc!.toFilePath()}',
         if (toolchainEnvScript != null)
           '-D${BuildConfig.toolchainEnvScriptConfigKey}='
diff --git a/pkgs/native_assets_cli/test/model/asset_test.dart b/pkgs/native_assets_cli/test/model/asset_test.dart
index d4175297f8..c542c5e3bf 100644
--- a/pkgs/native_assets_cli/test/model/asset_test.dart
+++ b/pkgs/native_assets_cli/test/model/asset_test.dart
@@ -17,82 +17,82 @@ void main() {
       name: 'foo',
       path: AssetAbsolutePath(fooUri),
       target: Target.androidX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
     Asset(
       name: 'foo2',
       path: AssetRelativePath(foo2Uri),
       target: Target.androidX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
     Asset(
       name: 'foo3',
       path: AssetSystemPath(foo3Uri),
       target: Target.androidX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
     Asset(
       name: 'foo4',
       path: AssetInExecutable(),
       target: Target.androidX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
     Asset(
       name: 'foo5',
       path: AssetInProcess(),
       target: Target.androidX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
     Asset(
       name: 'bar',
       path: AssetAbsolutePath(barUri),
       target: Target.linuxArm64,
-      packaging: Packaging.static,
+      linkMode: LinkMode.static,
     ),
     Asset(
       name: 'bla',
       path: AssetAbsolutePath(blaUri),
       target: Target.windowsX64,
-      packaging: Packaging.dynamic,
+      linkMode: LinkMode.dynamic,
     ),
   ];
 
   final assetsYamlEncoding = '''- name: foo
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: absolute
     uri: ${fooUri.toFilePath()}
   target: android_x64
 - name: foo2
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: relative
     uri: ${foo2Uri.toFilePath()}
   target: android_x64
 - name: foo3
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: system
     uri: ${foo3Uri.toFilePath()}
   target: android_x64
 - name: foo4
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: executable
   target: android_x64
 - name: foo5
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: process
   target: android_x64
 - name: bar
-  packaging: static
+  link_mode: static
   path:
     path_type: absolute
     uri: ${barUri.toFilePath()}
   target: linux_arm64
 - name: bla
-  packaging: dynamic
+  link_mode: dynamic
   path:
     path_type: absolute
     uri: ${blaUri.toFilePath()}
@@ -157,8 +157,8 @@ native-assets:
     expect(equality.hash(assets) != equality.hash(assets2), true);
   });
 
-  test('List<Asset> wherePackaging', () async {
-    final assets2 = assets.wherePackaging(Packaging.dynamic);
+  test('List<Asset> whereLinkMode', () async {
+    final assets2 = assets.whereLinkMode(LinkMode.dynamic);
     expect(assets2.length, 6);
   });
 
@@ -175,7 +175,7 @@ native-assets:
         assets.first.toYamlString(),
         '''
 name: foo
-packaging: dynamic
+link_mode: dynamic
 path:
   path_type: absolute
   uri: ${fooUri.toFilePath()}
diff --git a/pkgs/native_assets_cli/test/model/build_config_test.dart b/pkgs/native_assets_cli/test/model/build_config_test.dart
index 15f745f11d..dcaf5df9a6 100644
--- a/pkgs/native_assets_cli/test/model/build_config_test.dart
+++ b/pkgs/native_assets_cli/test/model/build_config_test.dart
@@ -43,14 +43,14 @@ void main() async {
       cc: fakeClang,
       ld: fakeLd,
       ar: fakeAr,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
 
     final config2 = BuildConfig(
       outDir: tempUri.resolve('out2/'),
       packageRoot: tempUri,
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
 
     expect(config1, equals(config1));
@@ -62,7 +62,7 @@ void main() async {
     expect(config1.cc != config2.cc, true);
     expect(config1.ld != config2.ld, true);
     expect(config1.ar != config2.ar, true);
-    expect(config1.packaging, config2.packaging);
+    expect(config1.linkModePreference, config2.linkModePreference);
     expect(config1.dependencyMetadata, config2.dependencyMetadata);
   });
 
@@ -71,14 +71,14 @@ void main() async {
       outDir: tempUri.resolve('out2/'),
       packageRoot: tempUri.resolve('packageRoot/'),
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
 
     final config = Config(fileParsed: {
       'out_dir': tempUri.resolve('out2/').toFilePath(),
       'package_root': tempUri.resolve('packageRoot/').toFilePath(),
       'target': 'android_arm64',
-      'packaging': 'prefer-static',
+      'link_mode_preference': 'prefer-static',
     });
 
     final fromConfig = BuildConfig.fromConfig(config);
@@ -93,7 +93,7 @@ void main() async {
       targetIOSSdk: IOSSdk.iPhoneOs,
       cc: fakeClang,
       ld: fakeLd,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
 
     final configFile = buildConfig1.toYaml();
@@ -107,7 +107,7 @@ void main() async {
       outDir: tempUri.resolve('out1/'),
       packageRoot: tempUri,
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
       dependencyMetadata: {
         'bar': Metadata({
           'key': 'value',
@@ -123,7 +123,7 @@ void main() async {
       outDir: tempUri.resolve('out1/'),
       packageRoot: tempUri,
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
       dependencyMetadata: {
         'bar': Metadata({
           'key': 'value',
@@ -148,7 +148,7 @@ void main() async {
       targetIOSSdk: IOSSdk.iPhoneOs,
       cc: fakeClang,
       ld: fakeLd,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
       // This map should be sorted on key for two layers.
       dependencyMetadata: {
         'foo': Metadata({
@@ -171,9 +171,9 @@ dependency_metadata:
       - z
       - a
 ld: ${fakeLd.toFilePath()}
+link_mode_preference: prefer-static
 out_dir: ${outDir.toFilePath()}
 package_root: ${tempUri.toFilePath()}
-packaging: prefer-static
 target: ios_arm64
 target_ios_sdk: iphoneos''';
     expect(yamlString, equals(expectedYamlString));
@@ -195,7 +195,7 @@ target_ios_sdk: iphoneos''';
       () => BuildConfig.fromConfig(Config(fileParsed: {
         'package_root': tempUri.resolve('packageRoot/').toFilePath(),
         'target': 'android_arm64',
-        'packaging': 'prefer-static',
+        'link_mode_preference': 'prefer-static',
       })),
       throwsFormatException,
     );
@@ -204,7 +204,7 @@ target_ios_sdk: iphoneos''';
         'out_dir': tempUri.resolve('out2/').toFilePath(),
         'package_root': tempUri.resolve('packageRoot/').toFilePath(),
         'target': 'android_arm64',
-        'packaging': 'prefer-static',
+        'link_mode_preference': 'prefer-static',
         'dependency_metadata': {
           'bar': {'key': 'value'},
           'foo': <int>[],
@@ -220,7 +220,7 @@ target_ios_sdk: iphoneos''';
         'out_dir': tempUri.resolve('out2/').toFilePath(),
         'package_root': tempUri.resolve('packageRoot/').toFilePath(),
         'target': [1, 2, 3, 4, 5],
-        'packaging': 'prefer-static',
+        'link_mode_preference': 'prefer-static',
       }));
     } on FormatException catch (e) {
       expect(e.toString(), stringContainsInOrder(['Config.string']));
@@ -235,7 +235,7 @@ target_ios_sdk: iphoneos''';
       targetIOSSdk: IOSSdk.iPhoneOs,
       cc: fakeClang,
       ld: fakeLd,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
     config.toString();
   });
@@ -245,7 +245,7 @@ target_ios_sdk: iphoneos''';
       outDir: tempUri.resolve('out2/'),
       packageRoot: tempUri,
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
     );
     final configFileContents = buildConfig.toYamlString();
     final configUri = tempUri.resolve('config.yaml');
@@ -263,7 +263,7 @@ target_ios_sdk: iphoneos''';
       outDir: tempUri.resolve('out1/'),
       packageRoot: tempUri,
       target: Target.androidArm64,
-      packaging: PackagingPreference.preferStatic,
+      linkModePreference: LinkModePreference.preferStatic,
       dependencyMetadata: {
         'bar': Metadata({
           'key': {'key2': 'value'},
@@ -290,7 +290,7 @@ target_ios_sdk: iphoneos''';
       cc: fakeCl,
       toolchainEnvScript: fakeVcVars,
       toolchainEnvScriptArgs: ['x64'],
-      packaging: PackagingPreference.dynamic,
+      linkModePreference: LinkModePreference.dynamic,
     );
 
     final configFile = buildConfig1.toYaml();
diff --git a/pkgs/native_assets_cli/test/model/build_output_test.dart b/pkgs/native_assets_cli/test/model/build_output_test.dart
index 6751416b6f..5b33d1fe9a 100644
--- a/pkgs/native_assets_cli/test/model/build_output_test.dart
+++ b/pkgs/native_assets_cli/test/model/build_output_test.dart
@@ -25,13 +25,13 @@ void main() {
         name: 'foo',
         path: AssetAbsolutePath(Uri(path: 'path/to/libfoo.so')),
         target: Target.androidX64,
-        packaging: Packaging.dynamic,
+        linkMode: LinkMode.dynamic,
       ),
       Asset(
         name: 'foo2',
         path: AssetRelativePath(Uri(path: 'path/to/libfoo2.so')),
         target: Target.androidX64,
-        packaging: Packaging.dynamic,
+        linkMode: LinkMode.dynamic,
       ),
     ],
     dependencies: Dependencies([
@@ -45,13 +45,13 @@ void main() {
   const yamlEncoding = '''timestamp: 2022-11-10 13:25:01.000
 assets:
   - name: foo
-    packaging: dynamic
+    link_mode: dynamic
     path:
       path_type: absolute
       uri: path/to/libfoo.so
     target: android_x64
   - name: foo2
-    packaging: dynamic
+    link_mode: dynamic
     path:
       path_type: relative
       uri: path/to/libfoo2.so
diff --git a/pkgs/native_assets_cli/test/model/packaging_test.dart b/pkgs/native_assets_cli/test/model/link_mode_test.dart
similarity index 81%
rename from pkgs/native_assets_cli/test/model/packaging_test.dart
rename to pkgs/native_assets_cli/test/model/link_mode_test.dart
index 398f760ef1..ba86d444c1 100644
--- a/pkgs/native_assets_cli/test/model/packaging_test.dart
+++ b/pkgs/native_assets_cli/test/model/link_mode_test.dart
@@ -6,7 +6,7 @@ import 'package:native_assets_cli/native_assets_cli.dart';
 import 'package:test/test.dart';
 
 void main() {
-  test('Packaging toString', () async {
-    Packaging.static.toString();
+  test('LinkMode toString', () async {
+    LinkMode.static.toString();
   });
 }
diff --git a/pkgs/native_assets_cli/test/model/target_test.dart b/pkgs/native_assets_cli/test/model/target_test.dart
index 7a6e3ee94f..ce74672660 100644
--- a/pkgs/native_assets_cli/test/model/target_test.dart
+++ b/pkgs/native_assets_cli/test/model/target_test.dart
@@ -9,18 +9,13 @@ import 'package:native_assets_cli/native_assets_cli.dart';
 import 'package:test/test.dart';
 
 void main() {
-  test('OS accessors', () async {
-    expect(OS.android.isDesktop, false);
-    expect(OS.android.isMobile, true);
-  });
-
   test('OS naming conventions', () async {
     expect(OS.android.dylibFileName('foo'), 'libfoo.so');
     expect(OS.android.staticlibFileName('foo'), 'libfoo.a');
     expect(OS.windows.dylibFileName('foo'), 'foo.dll');
-    expect(OS.windows.libraryFileName('foo', Packaging.dynamic), 'foo.dll');
+    expect(OS.windows.libraryFileName('foo', LinkMode.dynamic), 'foo.dll');
     expect(OS.windows.staticlibFileName('foo'), 'foo.lib');
-    expect(OS.windows.libraryFileName('foo', Packaging.static), 'foo.lib');
+    expect(OS.windows.libraryFileName('foo', LinkMode.static), 'foo.lib');
     expect(OS.windows.executableFileName('foo'), 'foo.exe');
   });