You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Minimize production code that is compiled or packaged as Spark-version-specific when it can safely use a conventional root-jar layout.
This issue replaces the former umbrella PR #14834 as the durable tracker for the gradual unshimming work. It also advances #11926 by reducing the surface that would need generated version-specific package names.
Motivation
The parallel-world classloader remains necessary for code that depends on incompatible Spark APIs or ABI shapes, but treating common code as version-specific by default has costs:
root-loaded integrations can fail when helpers are only visible through the shim classloader;
the distribution contains unnecessary parallel-world copies;
debugging and class ownership are harder to reason about; and
adding a Spark shim rebuilds and republishes code that is not actually version-dependent.
Approach
Move stable helper surfaces into narrowly-scoped Maven modules whose classes are safe in the jar root.
Use binary identity and dependency analysis to verify root safety across supported shims.
Replace temporary per-class root-promotion entries with module-level ownership or conditional root-safe source selection.
Keep code version-specific when a supported Spark or integration release lacks the required API, or when commonizing it would require reflection or a broader compatibility design.
Completed milestone: all current Iceberg package-private callers are root-safe
#15905 moved every current cuDF Plugin class that directly accesses an Iceberg package-private class or member to the assembled JAR root. Its package-phase audit now preserves that invariant across every selected Spark/Iceberg runtime world and rejects future callers placed in spark-shared or a versioned shim directory.
This removes the known classloader/package-identity exposure and turns the requirement into a build invariant. Iceberg code that genuinely depends on version-specific public APIs may still remain in its corresponding shim world.
Current priority milestone: eliminate Iceberg classes from spark-shared
#15944 is a draft stacked on #15841. When the stack merges, the assembled distribution for the supported OSS shim matrix should contain no Iceberg classes under spark-shared: portable classes will appear once at the conventional JAR root, while classes with real Spark/Iceberg compatibility differences will remain in the appropriate version-specific directories.
The final step also removes the remaining Iceberg per-class promotion exceptions and handles helpers such as GpuSparkPlanningUtil and GpuBaseReader whose root safety applies only to a subset of supported Spark/Iceberg combinations.
Goal
Minimize production code that is compiled or packaged as Spark-version-specific when it can safely use a conventional root-jar layout.
This issue replaces the former umbrella PR #14834 as the durable tracker for the gradual unshimming work. It also advances #11926 by reducing the surface that would need generated version-specific package names.
Motivation
The parallel-world classloader remains necessary for code that depends on incompatible Spark APIs or ABI shapes, but treating common code as version-specific by default has costs:
Approach
Completed foundations
Completed milestone: all current Iceberg package-private callers are root-safe
#15905 moved every current cuDF Plugin class that directly accesses an Iceberg package-private class or member to the assembled JAR root. Its package-phase audit now preserves that invariant across every selected Spark/Iceberg runtime world and rejects future callers placed in
spark-sharedor a versioned shim directory.This removes the known classloader/package-identity exposure and turns the requirement into a build invariant. Iceberg code that genuinely depends on version-specific public APIs may still remain in its corresponding shim world.
Current priority milestone: eliminate Iceberg classes from
spark-shared#15944 is a draft stacked on #15841. When the stack merges, the assembled distribution for the supported OSS shim matrix should contain no Iceberg classes under
spark-shared: portable classes will appear once at the conventional JAR root, while classes with real Spark/Iceberg compatibility differences will remain in the appropriate version-specific directories.The final step also removes the remaining Iceberg per-class promotion exceptions and handles helpers such as
GpuSparkPlanningUtilandGpuBaseReaderwhose root safety applies only to a subset of supported Spark/Iceberg combinations.Remaining work
main.src/main/spark*sources and document or remove unjustified version-specific copies.Completion criteria
spark-sharedsolely because of build layout.Out of scope