system
Given the following post, respond as if you're commenting on Reddit:
human
Why do some programs require a specific version(s) of Windows or Mac OS, but some don't?

Some programs might require Windows 7, others 7/Vista, and others 7/Vista/XP.  What causes these programs to require specific versions, and why do some seem to not?
gpt
There are typically two reasons for this:

**Programmers make assumptions**

For example, in the Windows 95/98/ME days, any program could modify any file anywhere, so many Windows programs wrote their settings to c:\program files\app name\settings.ini or something similar. When Windows NT/2K/XP/etc. came out, programs were only allowed to write to places their users had permissions to write to - and c:\program files\ is not one of them. As a result, many programs stopped working.

This can be circumvented by running the program as admin, but that has two issues; first, it's less secure. If there's a bug in the program, it can make any changes it wants to your system. Secondly, in a lot of environments (e.g. offices, schools, large enterprises, libraries) users don't have the ability to run as administrator, meaning they can't use these programs, they'll crash randomly, they won't save their settings, etc.

**OSes change**

Windows goes to a lot of trouble to keep things working whenever possible, but bugs still get fixed that app developers assume are ok. On Mac OS, Apple is almost militant about getting rid of old code in favour of new code. If Apple adds a better way of doing things in 10.6, then the old way will often be 'deprecated' (meaning that developers are told not to use this code because it will be removed) in 10.7, and it will be removed entirely in 10.8.

This can cause problems in one of two ways; first, old apps that don't get updated will continue to run on 10.6 and 10.7, because the old ways of doing things still exist, but will not run on 10.8. New apps that are written from scratch (the proper way) in 10.7 will continue to work in 10.8 and onward, but will not run in 10.6.

**Notes**

Good developers are able to mitigate these issues by detecting which version of the OS is running and using the old or new ways depending on which is available, but this can be a significant amount of development work, and can introduce subtle bugs. Also, there is often a very clear signal 'which way the wind is blowing', and developers can update their apps long before there's an issue (if they have the developer time).

Bad developers are especially prone to these issues. Most problems can be solved by writing code the way that Windows is designed to work, using the correct built-in functions instead of writing your own, asking Windows where to put documents instead of picking an arbitrary location, and so on. Bad developers are lazy, and instead of writing four lines of code to figure out where the documents directory is, will just use the app directory instead. They'll write their own functions because they're too lazy to look up the documentation to see if there is already a function to do what they're trying to do, and when they write it themselves they'll miss certain cases (e.g. what if the system language is in Hebrew? What if the timezone is different? What if the Windows directory isn't in c:\windows? They assume everything will always be the same as what they have and when things change in subtle ways, problems happen.