As we near the end of 2024, more and more new printers (at least in the mid-price range) are coming with Klipper pre-installed. This suggests that Marlin might be losing its market share. With Raspberry Pi prices expected to decrease and the possible emergence of dedicated Klipper single-board solutions, this trend could accelerate even further.
From my perspective, Marlin already has all the functionality needed for 3D printing, including modern features like Input Shaping, Linear Advance, and more. However, its compile-time configuration and the need to rebuild/flash the firmware for every change can be intimidating for users and inconvenient even for experienced developers. For example, I recently had to rebuild Marlin multiple times just to adjust the endstop position and the extruder microsteps.
Years ago, it was impossible for 8-bit boards to handle all features due to flash and RAM limitations, forcing users to make choices at build time. However, the situation has changed with modern 32-bit boards, which can support the entire codebase. This opens the door to moving the configuration process to an INI file, similar to how Klipper operates.
Suggested Steps for "Klipperization" of Marlin on 32-Bit Boards:
-
Build-Time Options for Maximum Flexibility:
Introduce an option to build Marlin with as much of the existing codebase as possible for a specific platform/boar), with SD card/EEPROM access pre-configured. This would include currently conflicting options that cause errors in Sanity.h, as these could be enabled or disabled at runtime.
This approach would allow distributing pre-built images for platforms rather than specific printers.
-
Dynamic Configuration:
Replace the current Config*.h system with a dynamic INI/EEPROM-based configuration. On startup, Marlin would use the build-time configuration only to locate a Marlin.ini file on the root of the SD card and load its settings. If no file is found, Marlin would fall back to EEPROM. The Marlin.ini file could be stored in EEPROM.
-
Dynamic Allocation of Large Variables:
To save RAM, large static variables (e.g., Input Shaping buffers with low SHAPING_MIN_FREQ) could be dynamically allocated. Since no free/delete operations are required, this would allow for a very simple memory allocation manager.
With these changes, I believe Marlin could become more attractive and gain a competitive edge against Klipper.
Anyway even without full build allowing to set option in INI file already will make Marlin much more useful.
As we near the end of 2024, more and more new printers (at least in the mid-price range) are coming with Klipper pre-installed. This suggests that Marlin might be losing its market share. With Raspberry Pi prices expected to decrease and the possible emergence of dedicated Klipper single-board solutions, this trend could accelerate even further.
From my perspective, Marlin already has all the functionality needed for 3D printing, including modern features like Input Shaping, Linear Advance, and more. However, its compile-time configuration and the need to rebuild/flash the firmware for every change can be intimidating for users and inconvenient even for experienced developers. For example, I recently had to rebuild Marlin multiple times just to adjust the endstop position and the extruder microsteps.
Years ago, it was impossible for 8-bit boards to handle all features due to flash and RAM limitations, forcing users to make choices at build time. However, the situation has changed with modern 32-bit boards, which can support the entire codebase. This opens the door to moving the configuration process to an INI file, similar to how Klipper operates.
Suggested Steps for "Klipperization" of Marlin on 32-Bit Boards:
Build-Time Options for Maximum Flexibility:
Introduce an option to build Marlin with as much of the existing codebase as possible for a specific platform/boar), with SD card/EEPROM access pre-configured. This would include currently conflicting options that cause errors in
Sanity.h, as these could be enabled or disabled at runtime.This approach would allow distributing pre-built images for platforms rather than specific printers.
Dynamic Configuration:
Replace the current
Config*.hsystem with a dynamic INI/EEPROM-based configuration. On startup, Marlin would use the build-time configuration only to locate aMarlin.inifile on the root of the SD card and load its settings. If no file is found, Marlin would fall back to EEPROM. TheMarlin.inifile could be stored in EEPROM.Dynamic Allocation of Large Variables:
To save RAM, large static variables (e.g., Input Shaping buffers with low
SHAPING_MIN_FREQ) could be dynamically allocated. Since no free/delete operations are required, this would allow for a very simple memory allocation manager.With these changes, I believe Marlin could become more attractive and gain a competitive edge against Klipper.
Anyway even without full build allowing to set option in INI file already will make Marlin much more useful.