Supported Platforms (original) (raw)

This page describes how Processing works on the different platforms we support across macOS, Windows, and Linux.

The Processing Development Environment (PDE) is currently tested on:

  1. macOS Sequoia 15 on Apple Silicon
  2. Windows 11 (AMD) & Windows 10 (Intel)
  3. Linux (Ubuntu 22.04, 64-bit Intel)
  4. Linux on Raspberry Pi (64-bit ARM)

If something is broken on one of those platforms, we'll try to fix it.

Also check out the page for platform-specific issues.

Windows

Windows has traditionally been the best/most supported platform for running Java applications. Nowadays, there's more parity between Windows, macOS, and Linux releases.

macOS

Apple has aggressively updated their OS and deprecated old features. Older versions of Processing (3.x and earlier) are likely to not work at all, due to Apple's updates and restrictions. Please use 4.0!

  # The home and end keys should only travel to the start/end of the current line.  
  # The OS X HI Guidelines say that home/end are relative to the document.  
  # if this is not to your liking, this is the preference to change:  
  editor.keys.home_and_end_travel_far = false  
  # The home and end keys move to the first/last non-whitespace character,  
  # and move to the actual start/end when pressed a second time.  
  # Note that this only works if editor.keys.home_and_end_travel_far is false.  
  editor.keys.home_and_end_travel_smart = true  

Linux

With any luck, the Linux release should work fine by simply changing to the processing folder and typing:

  launcher.linux = /path/to/launcher_app  

Java

Native Libraries

4.0 beta 4 includes several updates to how different operating systems and hardware are handled. This allows us to add Apple Silicon (M1) support, and also better handles other devices like the Raspberry Pi.

We use a naming system that defines a “variant,” which consists of the OS name (windows, macos, or linux) followed by a the naming from the os.arch value returned by System.getProperty(). Because those names can vary across JDK implementations, we'll be using the name used by the JDK included with the Processing download, which is currently from Adoptium.

This {name}-{arch} naming style helps drastically simplify the code inside the PDE, and also gets us out of the business of deciding how to rename each platform. While the naming is sometimes awkward (i.e. macos-x86_64), the alternatives are inelegant as well, so we'll err on the side of simplicity by inheriting how the platform handles naming. Users will (should) never see those awkward names! And only Library developers that need additional native code will need to understand the naming, but they should already be somewhat familiar with that nomenclature if they're working with native code.

As a result of these changes, the subfolders used to identify native libraries for each platform are different. Any library that used the old naming convention (macosx, windows64, etc) correctly will still work. But use these new names so that your library is ready for other platforms like Apple Silicon, or ARM on the Raspberry Pi.

Hardware/OS os.arch bits 4.0 library folder old library folder download suffix
macOS (Apple Silicon) aarch64 64 macos-aarch64 macos-aarch64
macOS (Intel 64-bit) x86_64 64 macos-x86_64 macosx macos-x64
Windows (Intel 64-bit) amd64 64 windows-amd64 windows64 windows-x64
Linux (Intel 64-bit) amd64 64 linux-amd64 linux64 linux-x64
Linux (Raspberry Pi 32-bit) arm 32 linux-arm linux-armv6hf linux-arm32
Linux (Raspberry Pi 64-bit) aarch64 64 linux-aarch64 linux-arm64 linux-arm64

(The “bits” column is equivalent to sun.arch.data.model)

Raspberry Pi vs Linux – Technically, the Raspberry Pi releases may run on other ARM Linux installations, but they aren't tested that way. And the Raspberry Pi version includes additional libraries that are specific to the Pi. Put another way, generic Linux on ARM is not a supported platform, so we don't list it as “Linux (ARM 32-bit)” in places like Export to Application.

Old Libraries – Some libraries did not properly use the old naming system, which will cause them to break in the 4.0 release. For instance, if dylib and dll files were simply placed in the root of a library, the library will probably not work. Moving the files into subfolders that use the naming conventions above should get them working again. If this sounds confusing, just look at how the core folder is laid out in the Processing software itself: it's a single library with native libraries for all six platforms to support OpenGL .

Native Libraries for Some Platforms, Not Others – If your library only needs native code on certain platforms, create the subfolders for the other platforms anyway, and simply leave the folders empty. Otherwise it will appear as though the native libraries are “missing” for their machine, and the user will be shown a warning. This is an exceptionally rare scenario, but it happens.


You can also view the Supported Platforms from 3.x, though much of that information will be out of date.