<div dir="ltr"><div>Interesting, what are the advantages of removing all of the "exports"? Are they just code smells?</div><div><br></div><div>In an ideal world where there were none of these "exports", java.desktop would need to reimplement this OS detection functionality, no? Or would something like jdk.internal.util.OperatingSystem be promoted to a public API?</div><div><br></div><div>More immediately, in your opinion is it worth keeping OSInfo around as a 10-line wrapper around jdk.internal.util.OperatingSystem in order to limit the "blast radius" of the dependency? Or does it not matter whether 1 class uses it or 20 classes use it, once the dependency has been created?</div><div><br></div><div>Take care,</div><div><br></div><div>Daniel</div><div><br></div><div><br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Mon, Mar 24, 2025 at 11:25 PM Philip Race <<a href="mailto:philip.race@oracle.com">philip.race@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I am not a huge fan of sun.awt.OSInfo and I know a lot of uses are <br>
out-dated,<br>
and probably could be removed.<br>
Whether that ends up in not needing OSInfo is another a question.<br>
But I would *not* want to migrate to a jdk.internal API.<br>
I have a goal of someday having zero cases of java.base "exports FOO to <br>
java.desktop"<br>
Its not a top priority to complete, but at the same time I don't want to <br>
needlessly go in the opposite direction.<br>
<br>
<br>
-phil.<br>
<br>
On 3/24/25 3:18 PM, Daniel Gredler wrote:<br>
> Hi all,<br>
><br>
> The sun.awt.OSInfo class seems to replicate the functionality in <br>
> jdk.internal.util.OperatingSystem, with one additional capability: <br>
> distinguishing between different versions of Windows. However, the <br>
> Windows versions included are Windows 95 through Windows 7, which <br>
> hasn't been an officially-supported platform for the JDK since Java 7. <br>
> There are Windows version checks which rely on OSInfo sprinkled <br>
> throughout the java.desktop module, but all of them are checking for <br>
> Windows versions which are not even supported anymore, as far as I can <br>
> tell. Would a PR which removes OSInfo be accepted, or is there a <br>
> reason to keep it around that I'm missing?<br>
><br>
> Thanks!<br>
><br>
> Daniel<br>
><br>
> (Somewhat related: <a href="https://bugs.openjdk.org/browse/JDK-8305777" rel="noreferrer" target="_blank">https://bugs.openjdk.org/browse/JDK-8305777</a>)<br>
><br>
> ---<br>
><br>
> $ grep -r --include "*.java" OSInfo src/java.desktop/<br>
> src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java: <br>
> supported = OSInfo.getWindowsVersion()<br>
> src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java: <br>
> .compareTo(OSInfo.WINDOWS_7) >= 0<br>
> src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java: <br>
> if (recentFolder != null && <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_2000) >= 0) {<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.WINDOWS;<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> if (OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0) {<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> isClassicWindows = <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0;<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) >= 0)) {<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.WINDOWS<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> && <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_VISTA) >= 0;<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.WINDOWS<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> && <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_7) >= 0;<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&<br>
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java: <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) < 0) {<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.LINUX;<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java: <br>
> return (OSInfo.getOSType() == OSInfo.OSType.LINUX ||<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java: <br>
> OSInfo.getOSType() == OSInfo.OSType.MACOSX);<br>
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java: <br>
> return OSInfo.getOSType() == OSInfo.OSType.AIX;<br>
> src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.LINUX) {<br>
> src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java: <br>
> int numOfColor = OSInfo.getOSType() == OSInfo.OSType.AIX ? 8 : 4;<br>
> src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.LINUX) { // Load motif <br>
> default colors on Linux.<br>
> src/java.desktop/share/classes/javax/swing/PopupFactory.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/javax/swing/PopupFactory.java: <br>
> if ((OSInfo.getOSType() == OSInfo.OSType.MACOSX) && (owner != null) &&<br>
> src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java: <br>
> boolean isWindows = OSInfo.getOSType() == <br>
> OSInfo.OSType.WINDOWS;<br>
> src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: <br>
> OSInfo.OSType osType = OSInfo.getOSType();<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: if <br>
> (osType == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: else if <br>
> (osType == OSInfo.OSType.MACOSX) {<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: <br>
> OSInfo.OSType osType = OSInfo.getOSType();<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: if <br>
> (osType == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: if <br>
> (osType == OSInfo.OSType.MACOSX) {<br>
> src/java.desktop/share/classes/javax/swing/UIManager.java: if <br>
> (OSInfo.getOSType() == OSInfo.OSType.MACOSX) {<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:import static <br>
> sun.awt.OSInfo.OSType.*;<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:public class OSInfo {<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java: private static <br>
> final Map<String, WindowsVersion> windowsVersionMap = new <br>
> HashMap<String, OSInfo.WindowsVersion>();<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java: private OSInfo() {<br>
> src/java.desktop/share/classes/sun/awt/FontConfiguration.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java: <br>
> if (f.equals(canonical) || OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/sun/print/PSPrinterJob.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/print/PSPrinterJob.java: isMac <br>
> = OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
> src/java.desktop/share/classes/sun/print/PSPrinterJob.java: if <br>
> (OSInfo.getOSType() == OSInfo.OSType.LINUX ||<br>
> src/java.desktop/share/classes/sun/print/PSPrinterJob.java: <br>
> OSInfo.getOSType() == OSInfo.OSType.MACOSX) {<br>
> src/java.desktop/share/classes/sun/print/ServiceDialog.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/print/ServiceDialog.java: <br>
> if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
> src/java.desktop/share/classes/sun/font/FontUtilities.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/font/FontUtilities.java: <br>
> isLinux = OSInfo.getOSType() == OSInfo.OSType.LINUX;<br>
> src/java.desktop/share/classes/sun/font/FontUtilities.java: <br>
> isMacOSX = OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
> src/java.desktop/share/classes/sun/font/FontUtilities.java: <br>
> isWindows = OSInfo.getOSType() == OSInfo.OSType.WINDOWS;<br>
> src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java: <br>
> boolean isXPPlatform = (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&<br>
> src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java: <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) >= 0);<br>
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:import <br>
> sun.awt.OSInfo;<br>
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.LINUX) {<br>
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java: <br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
><br>
<br>
</blockquote></div>