OpenMPT 1.27 and libopenmpt 0.3.0 remove support for old Windows and Wine systems and old C++ compilersThis post will be updated and clarified as needed. For each update, a short reply summarizing the update will be made in order to notify topic subscribers.
Upcoming OpenMPT 1.27 and libopenmpt 0.3.0 will very likely remove support for old Windows and Wine systems and old C++ compilers.
tl;dr:
If you are running OpenMPT Win32 or Win64 on Windows 7 (or later) or Wine 1.8 (or later), the changes will not affect you.
If you are running OpenMPT Wind32old on Windows XP (or later) or Wine
1.4 1.6 (or later), the changes will not affect you.
If you are compiling libopenmpt with a C++11 compiler (MSVC >=
2013 2015, GCC >=
4.7 4.8, Clang >=
3.3 3.4, Android NDK >=
12 11, Emscripten >= 1.31.0), the changes will not affect you.
Otherwise, read on.
Long explanationA considerable amount of development time is lost by working around problems with older compilers and/or older Windows and Wine versions. In order to save time and to allow focusing on more important features rather than working around buggy old software, we decided to remove support for the oldest supported platforms and compilers.
In order to actually gain us anything at all with respect to development efficiency, we need to remove support for all C++ compilers which are not C++11 (the C++ language standard which had been finalized in 2011) compatbile (see
https://bugs.openmpt.org/view.php?id=836).
This includes (for both OpenMPT and libopenmpt):
- MSVC 2008, MSVC 2010, MSVC 2012, MSVC 2013 (for OpenMPT and libopenmpt)
- GCC 4.1, GCC 4.2, GCC 4.3, GCC 4.4, GCC 4.5, GCC 4.6, GCC 4.7 (for libopenmpt)
- Clang 3.0, Clang 3.1, Clang 3.2, Clang 3.3 (for libopenmpt)
- Android NDK 9, Android NDK 10,
Android NDK 11 (for libopenmpt) - Emscriptem < 1.31.0 (for libopenmpt)
Still supporting (for both OpenMPT and libopenmpt):
MSVC 2013, MSVC 2015, MSVC 2017, ... (for OpenMPT and libopenmpt)GCC 4.6, GCC 4.7, GCC 4.8, GCC 4.9, GCC 5.x, GCC 6.x, ... (for libopenmpt)Clang 3.2, Clang 3.3, Clang 3.4, Clang 3.5, Clang 3.6, Clang 3.7, Clang 3.8, Clang 3.9, Clang 4, ... (for libopenmpt)- Android NDK 11, Android NDK 12, Android NDK 13, Android NDK 14, ... (for libopenmpt)
- Emscripten >= 1.31.0, ... (for libopenmpt)
For OpenMPT, this means we can only still support Windows versions which are supported by
MSVC 2013, MSVC 2015 and/or MSVC 2017. The minimum Operating System versions in this case are:
- Windows XP (for 32bit) (removing Windows 98 SE + KernelEx, Windows ME + KernelEx, Windows 2000)
- Windows XP x64 (for 64bit) (not removing anything and instead actually providing 64bit builds for Windows XP x64 and Windows Vista again)
- Wine
1.4 1.6 (removing Wine 1.0, Wine 1.1, Wine 1.2, Wine 1.3, Wine 1.4, Wine 1.5)
For libopenmpt, this will bump the minimum required Operating System versions (when using the respective default compiler; you may still compile libopenmpt if you have some newer compiler available):
- Windows XP (removing Windows 98 SE + KernelEx, Windows ME + KernelEx, Windows 2000)
Debian 7, Debian 8 (removing Debian 4, Debian 5, Debian 6, Debian 7)- Ubuntu 14.04 (removing Ubuntu 8.04, Ubuntu 10.04, Ubuntu 12.04)
- FreeBSD 10 (removing FreeBSD 7, FreeBSD 8, FreeBSD 9)
- CentOS 7 (removing CentOS 5, CentOS 6)
Note that all of these common Operating Systems have already stable Long Term Support releases (which we will continue to support) out since more than 2 years now. For Windows, Long Term Support for Windows 2000 even expired more than 5 years ago by now.
Why?As already stated above, a lot of development time is wasted on these old platforms.
If you are not a developer yourself, consider the following:
When still supporting Windows 98SE + KernelEx, we are forced to use Visual Studio 2008 because newer versions do not allow targetting Windows 98 at all. Now, Visual Studio 2008 is a
8 year old compiler, implementing a
13 year old bugfix (C++03) to a
18 year old programming language (C++98), implementing partially another
11 year old update (C++03 TR1), in order to target a
17 year old bugfix (Windows 98 SE) to basically a
21 year old Operating System (Windows 95) for which the latest security update expired
10 years ago, and requiring a
5 year old update (KernelEx 4.5) to an unofficial
7 year old patch (KernelEx 4) in order to emulate a
16 year old Operating System (Windows 2000) which itself expired
6 years ago, in order to be able to run OpenMPT at all. Even only 5 years is a very long time period in software development.
There have been multiple updates to the programming language (C++) that OpenMPT uses since then: C++03 TR1, C++11, C++14, and, by the time OpenMPT 1.27 will be released, probably even C++17. Programming in completely outdated versions of a programming language is no fun at all and working around the respective problems in old compilers or on old systems is cumbersome at best. It wastes considerable amounts of development time that would better be spent on other, more important aspects. And we are not talking about some minutes per month here, but instead multiple hours, often even days per month. Depending on the area being worked on, supporting these old platform can require more than 50% of the development time.
Sticking to old versions of C++ also actively hinders support for newer systems, makes the code harder to maintain and discourages outside contributors.
We are fully aware of the fact that a big aspect of OpenMPT is the support for ancient module formats, and we can see some utility in also supporting ancient (albeit still way newer than some module formats) systems with kind of the same mindset. However, there needs to be a border drawn somewhere. Practically all other software projects that are still being developed had already dropped support for pre Windows XP systems years ago, and many are considering dropping pre Windows Vista systems right now. OpenMPT will still be doing better in that regard than the average of the industry.
On the libopenmpt side, things are a little different. Libopenmpt-only code had already been written in a very C++11-ish way from the start (but still being compatible with C++98). Hadn't the OpenMPT code itself supported MSVC 2008, libopenmpt probably would not have gotten any pre C++11 support at all in the first place. However, compared to supporting MSVC 2008, additionally supporting old versions of GCC did not impose any significant additional burden. Now, when the MSVC 2008 support requirement goes away, that burden would increase significantly compared to also removing older GCC and similar compilers, because only removing compiler support in OpenMPT will not gain us much at all as about 50% of all code is shared between OpenMPT and libopenmpt.
Statistics (OpenMPT)Starting with OpenMPT 1.26.04.00, we collected statistics about the Operating System used by our users via the built-in update mechanism (this had been mentioned in the release announcement and in History.txt).
The results (as of 2016-08-23) are the following:
Windows versions:
Windows NT4 0 %
Windows 98 0 %
Windows ME 0 %
Windows 2000 0 %
Windows XP 4 % #########
Windows XP x64 0 % #
Windows Vista 1 % ##
Windows 7 29 % ###########################################################
Windows 8 1 % ###
Windows 8.1 8 % ################
Windows 10 54 % #############################################################################################################
Wine 3 % ######
Wine versions broken down:
wine-1.6.2 41 % ##################################################################################
wine-1.7.44 4 % ########
wine-1.7.55 4 % ########
wine-1.8.3 11 % #######################
wine-1.9.15 4 % ########
wine-1.9.16 30 % ############################################################
wine-unknown 7 % ###############
There are updated statistics posted later in this thread. The original summary analysis is still mostly valid though.Summary:
About 50% of OpenMPT users are running Windows 10, followed by 25% on Windows 7, roughly 10% on Windows 8.1 and 5% on Windows XP as well as 5% on some version of Wine.
About 50% of our Wine users are running a development (1.odd.x) version of Wine, and most of them are running the latest. The other 50% are running the latest stable (1.even.x) Wine version provided by their distribution.As we had already guessed beforehand, we actually do not have any user (using the OpenMPT update mechanism) at all, who will be affected by this change, which makes us confident that this is the right decision.
Less than 3% of our users will be affected at all by the change in system support, and all of those being users on Wine where the difference between Win32/Win64 and Win32old/Win64old build variants is mostly negligable anyway (MediaFoundation, which OpenMPT uses in Win32 and Win64 build variants for compressed sample import, is not avilable on Wine).
No known users at all will not be able to run OpenMPT 1.27 on their system.
FAQ- Q: OpenMPT suggests upgrading from Win32old/Win64old to Win32/Win64 variants on every startup. Can that be disabled?
A: Yes. Set the advanced setting [Update]SuggestDifferentBuildVariant to 0.
- Q: Can the check that causes OpenMPT to warn about an unsupported Windows or Wine version on startup be disabled?
A: Yes. Start OpenMPT via mptrack.exe /noSysCheck.
- Q: Can the check that causes OpenMPT to exit on incompatible hardware be disabled?
A: Yes. Start OpenMPT via mptrack.exe /noSysCheck.
Feel free to ask any further questions.
OpenMPT 1.27 build variant comparison | Win32old | Win64old | Win32 | Win64 |
CPU support | | | | |
works on CPUs without SSE2 instructions | yes | n/a | no | n/a |
works on CPUs without 64bit support | yes | no | yes | no |
optimal performance on CPUs with SSE2 instructions | no | yes | yes | yes |
performance when using mostly 32bit VST plugins | good | bad | good | bad |
performance when using mostly 64bit VST plugins | bad | good | bad | good |
. | | | | |
| Win32old | Win64old | Win32 | Win64 |
Windows users | | | | |
minimum Windows Version | Windows XP | Windows XP x64 | Windows 7 | Windows 7 |
built-in MO3 module loading
(can otherwise use Un4seen unmo3.dll as fallback) | requires libmpg123 built-in
| requires libmpg123 built-in
| built-in | built-in |
MP3 sample import | requires libmpg123 yes
| requires libmpg123 yes
| yes | yes |
MediaFoundation sample import (M4A, AAC, MP3, WMA, ...) | no | no | yes | yes |
. | | | | |
| Win32old | Win64old | Win32 | Win64 |
Wine users | | | | |
minimum Wine Version | 1.4 1.6
| 1.4 1.6
| 1.8 | 1.8 |
recommended Wine emulated Windows Version | Windows XP | Windows XP | Windows XP | Windows XP |
built-in MO3 module loading
(can otherwise use Un4seen unmo3.dll as fallback) | requires libmpg123 built-in
| requires libmpg123 built-in
| requires libmpg123 built-in
| requires libmpg123 built-in
|
MP3 sample import | requires libmpg123 yes
| requires libmpg123 yes
| requires libmpg123 yes
| requires libmpg123 yes
|
MediaFoundation sample import (M4A, AAC, MP3, WMA, ...) | no | no | no | no |
. | | | | |
| Win32old | Win64old | Win32 | Win64 |
Windows Server users | | | | |
minimum Windows Server Version | Windows Server 2003 | Windows Server 2003 | Windows Server 2008 R2 | Windows Server 2008 R2 |
built-in MO3 module loading
(can otherwise use Un4seen unmo3.dll as fallback) | requires libmpg123 built-in
| requires libmpg123 built-in
| requires libmpg123 built-in
| requires libmpg123 built-in
|
MP3 sample import | requires libmpg123 yes
| requires libmpg123 yes
| requires libmpg123 yes
| requires libmpg123 yes
|
MediaFoundation sample import (M4A, AAC, MP3, WMA, ...) | no | no | no | no |
. | | | | |
| Win32old | Win64old | Win32 | Win64 |
compiler configuration (only relevant for developers) | | | | |
compiler | VS2015 v140_xp | VS2015 v140_xp | VS2015 v140 | VS2015 v140 |
minimum Windows Kernel | Windows XP | Windows XP x64 | Windows Vista | Windows Vista |
minimum Windows API | Windows XP | Windows XP x64 | Windows 7 | Windows 7 |
minimum CPU features | 586 (cpuid fpu cx8) | amd64 (cpuid cx8 tsc cmov sse sse2 x86-64) | 686+sse2 (cpuid fpu cx8 tsc cmov sse sse2) | amd64 (cpuid cx8 tsc cmov sse sse2 x86-64) |
System and CPU support matrix for OpenMPTOld situation (OpenMPT 1.26):
CPU | 32bit | 32bit+SSE2 | 64bit |
Wine 0.x.x | ? ? ? | ? ? ? | n/a |
Wine 1.0.x | Win32old | Win32old | n/a |
Wine 1.1.x | Win32old | Win32old | n/a |
Wine 1.2.x | Win32old | Win32old | Win32old / ? ? ? |
Wine 1.3.x | Win32old | Win32old | Win32old / ? ? ? |
Wine 1.4.x | Win32old | Win32 | Win32 / ? ? ? |
Wine 1.5.x | Win32old | Win32 | Win32 / ? ? ? |
Wine 1.6.x | Win32old | Win32 | Win32 / Win64 |
Wine 1.7.x | Win32old | Win32 | Win32 / Win64 |
Wine 1.8.x | Win32old | Win32 | Win32 / Win64 |
Wine 1.9.x | Win32old | Win32 | Win32 / Win64 |
Wine 2.x.x | Win32old | Win32 | Win32 / Win64 |
Windows 95 | unsupported | n/a | n/a |
Windows 98 | unsupported | unsupported | n/a |
Windows 98SE | unsupported | unsupported | n/a |
Windows ME | unsupported | unsupported | n/a |
Windows 98SE + KernelEx | Win32old | Win32old | n/a |
Windows ME + KernelEx | Win32old | Win32old | n/a |
Windows 2000 | Win32old | Win32old | n/a |
Windows XP | Win32old | Win32old | n/a |
Windows XP x64 | n/a | n/a | Win32old |
Windows Vista | Win32old | Win32old | Win32old |
Windows 7 | Win32old | Win32 | Win32 / Win64 |
Windows 8 | n/a | Win32 | Win32 / Win64 |
Windows 8.1 | n/a | Win32 | Win32 / Win64 |
Windows 10 | n/a | Win32 | Win32 / Win64 |
Not supported.Supported with reduced feature set and no 64bit builds.Supported with reduced feature set.Completely supported.New situation (OpenMPT 1.27):
CPU | 32bit | 32bit+SSE2 | 64bit |
Wine 0.x.x | unsupported | unsupported | n/a |
Wine 1.0.x | unsupported | unsupported | n/a |
Wine 1.1.x | unsupported | unsupported | n/a |
Wine 1.2.x | unsupported | unsupported | unsupported |
Wine 1.3.x | unsupported | unsupported | unsupported |
Wine 1.4.x | unsupported | unsupported | unsupported |
Wine 1.5.x | unsupported | unsupported | unsupported |
Wine 1.6.x | Win32old | Win32old | Win32old / Win64old |
Wine 1.7.x | Win32old | Win32old | Win32old / Win64old |
Wine 1.8.x | Win32old | Win32 | Win32 / Win64 |
Wine 1.9.x | Win32old | Win32 | Win32 / Win64 |
Wine 2.x.x | Win32old | Win32 | Win32 / Win64 |
Windows 95 | unsupported | n/a | n/a |
Windows 98 | unsupported | unsupported | n/a |
Windows 98SE | unsupported | unsupported | n/a |
Windows ME | unsupported | unsupported | n/a |
Windows 98SE + KernelEx | unsupported | unsupported | n/a |
Windows ME + KernelEx | unsupported | unsupported | n/a |
Windows 2000 | unsupported | unsupported | n/a |
Windows XP | Win32old | Win32old | n/a |
Windows XP x64 | n/a | n/a | Win32old / Win64old |
Windows Vista | Win32old | Win32old | Win32old / Win64old |
Windows 7 | Win32old | Win32 | Win32 / Win64 |
Windows 8 | n/a | Win32 | Win32 / Win64 |
Windows 8.1 | n/a | Win32 | Win32 / Win64 |
Windows 10 | n/a | Win32 | Win32 / Win64 |
Not supported.Not supported anymore (worse than before, OpenMPT 1.26 was supported).Supported with reduced feature set (worse than before, OpenMPT 1.26 was completely supported).Supported with reduced feature set.Supported with reduced feature set (better than before, OpenMPT 1.26 had no 64bit builds).Completely supported.
Unofficial CPU support matrix for OpenMPT:
This matrix contains mostly
Mainstream Desktop CPUs and some
SoCs only (Budget Desktop CPUs (Intel Celeron, AMD Duron, AMD Sempron, ...) as well as Workstation and Server CPUs (Intel Xeon, AMD Opteron, AMD Phenom, ...) have similar features as the Desktop CPUs of the same generation, Mobile CPUs in general lag 1 generation behind, embedded SoCs sometimes even more).
The Win32old and Win64 variants of OpenMPT are compiled with a compiler which supports Windows down to and including Windows XP. This means the compiler is free to assume that the CPU has all features that Windows XP depends on. Thus, any CPU that is not supported by Windows XP is also not supported by OpenMPT.
Windows 8 requires a CPU with support for SSE2 instructions. Thus, if you are using Windows 8 or later, your CPU definately supports SSE2.
Most modern Linux distributions require at least a 686 compatible CPU. Thus, OpenMPT will almost certainly work on Wine on any modern Linux distribution.
The following table lists the supported CPUs for each individual build variant. The table is for the most part based on documentation only and has not been verified on actual hardware. | Intel | AMD NSC NexGen | Zhaoxin VIA Cyrix IDT | RDC Transmeta DM&P SiS Rise |
unsupported 32 Bit, 486, no FPU 32 Bit, 486 32 Bit, 586, LOCK bug
| Intel 80486SX (1989) Intel 80486DX (1989) Intel Quark (2013)
| AMD Am486 SX (1993) AMD Am486 DX (1993) NexGen Nx586 (1994) AMD Am5x86 (1995) NexGen Nx586-PF (1995)
| Cyrix Cx486S (1993) Cyrix Cx486DX (1993) Cyrix 5x86 (1995) Cyrix MediaGX (1997)
| DM&P Vortex86SX (2008) DM&P Vortex86DX (2008) DM&P Vortex86MX (2008)
|
unsupported as of 1.27 32 Bit, 586, no CMPXCHG8B 32 Bit, 586, optional CPUID 32 Bit, 586, optional CMPXCHG8B
| - none
| - none
| Cyrix 6x86 (1996) Cyrix 6x86L (1996) IDT WinChip C6 (MMX) (1997) IDT WinChip 2 (3dNow) (1998)
| Rise mP6 (MMX) (1998)
|
Win32old 32 Bit, 586 32 Bit, 686, CMOV (MMX) (3dNow (incl. MMX)) (3dNowExt (incl. 3dNow)) (SSE1 (incl. MMX)) (3dNowPro (incl. 3dNowExt, SSE1))
| Intel Pentium (1993) Intel Pentium Pro (1995) Intel Pentium MMX (MMX) (1996) Intel Pentium 2 (MMX) (1997) Intel Pentium 3 (SSE1) (1999)
| AMD K5 (1996) AMD K6 (MMX) (1997) AMD K6-2 (3dNow) (1998) AMD K6-III (3dNow) (1999) AMD Athlon (K7) (3dNowExt) (1999) NSC Geode GX1 (MMX) (2000) AMD Athlon XP (3dNowPro) (2001) NSC Geode GX2 (3dNow) (2002) AMD Geode GX (3dNow) (2002) AMD Geode LX (3dNow) (2003) AMD Geode NX (3dNowPro) (2004)
| Cyrix 6x86MX (MMX) (1997) Cyrix MII (MMX) (1998) Cyrix MediaGXm (MMX) (1998) VIA Cyrix III (3dNow) (2000) VIA C3 (SSE1) (2001)
| Transmeta Crusoe (MMX) (2000) SiS 55x (MMX) (2001) DM&P Vortex86 (MMX) (2001) RDC IAD 100 (2009)
|
Win32 / Win32old 32 Bit, SSE2
| Intel Pentium 4 (2000) Intel Pentium M (2003) Intel Core (2006) Intel Atom N2xx (2008) Intel Atom Zxxx (2008) Intel Atom Z2xxx (2012)
| - none
| VIA C7 (2005)
| Transmeta Efficeon (2004)
|
Win64 / Win32 / Win64old / Win32old 32 Bit, SSE2, 64 Bit
| Intel Pentium D (2005) Intel Core 2 (2006) Intel Atom cores (2008) Intel Core cores (2008) anything (since 2013)
| AMD Athlon 64 (3dNowPro) (2003) AMD Athlon (K10) (3dNowPro) (2007) AMD Athlon II (3dNowPro) (2009) AMD Bulldozer cores (2011) AMD Bobcat cores (2011) AMD Zen cores (2017) anything (since 2005)
| VIA Nano (2008) VIA Nano X2 (2011) VIA QuadCore (2015) Zhaoxin Kaixian ZX-A Zhaoxin Kaixian ZX-C Zhaoxin Kaixian ZX-C+ Zhaoxin Kaisheng ZX-C+
| - none
|
OpenMPT 1.27 removes support for the
Rise mP6, very likely also for the
Cyrix 6x86, and likely also the
Cyrix 6x86L,
IDT Winchip C6 and
IDT Winchip 2.
This post will be updated and clarified as needed. For each update, a short reply summarizing the update will be made in order to notify topic subscribers. Please, feel free to ask any questions in this thread.