I'm very happy to see that a release of NSIS 3.0 final is on the horizons, you guys did a great job. However, there are still a couple of things that, to me, remain unresolved. In this post I would like to address some of them. Some of them have been discussed before, but since they still haven't been addressed in RC1, I'd like to bring them up. This is not a rant, just an expression of unhappiness.
Post-Windows XP is a reality
As you know, Microsoft
finally retired Windows XP. As of April 2014, Microsoft no longer provides “security updates or technical support for the Windows XP operating system” and the company urges users to migrate to a modern version of Windows. Not everyone is convinced about this, and for one reason or another there is a still considerable amount of users for whom migration is out of question. In April 2016,
according to NetShare, Windows XP is still the third most-used operating system on the planet, installed on 9.88% of all computers. That is a problem.
On the other hand, I always respected NSIS for supporting such a width of Windows systems, the amount of work that went into that cannot be appreciated enough. Hell, I'm not arguing that support for pre-Vista versions of Windows should be dropped, that's not my point. I'm talking about the 74.6% of users that use Windows Vista, Windows 8, Windows 8.1, or Windows 10 (embezzeling all server equivalents), the majority of Windows users – potential NSIS users.
So, what's the problem?
The problem, to me, is some of NSIS default settings still appear to me biased towards pre-Vista. Take the compiling options in the Explorer context-menu.
WriteRegStr HKCR ".nsh" "" "NSIS.Header"
WriteRegStr HKCR ".nsh" "PerceivedType" "text"
WriteRegStr HKCR "NSIS.Header" "" "NSIS Header File"
WriteRegStr HKCR "NSIS.Header\DefaultIcon" "" "$INSTDIR\makensisw.exe,2"
ReadRegStr $R0 HKCR "NSIS.Header\shell\open\command" ""
${If} $R0 == ""
WriteRegStr HKCR "NSIS.Header\shell" "" "open"
WriteRegStr HKCR "NSIS.Header\shell\open\command" "" 'notepad.exe "%1"'
${EndIf}'
Source:
makensis.nsi, lines 267-275
This code will create a context-menu, which let's the user compile NSIS script files using right-click in the Explorer. It works on probably all versions from Windows 95 (wild guess) to Windows XP (fact). Alternatives for this piece of code have been around for
ages. Implementing these doesn't mean support for Windows XP and earlier goes away, it's a conditional option.
Let's talk User Account Control. UAC has been introduced to Windows with the release of Vista in November 2006 (RTM)/January 2007 (general availability), soon that's 10 years ago. As of then, unless deliberately disabled, Windows requires administrative permissions to write files to $PROGRAMFILES. As a side-effect, none of the Examples that ship with NSIS can be tested in its default location – makensis would have to be run with admin rights to be able to write an installer. I haven't checked whether it's mentioned in the documentation, that in order to compile examples, the user would have to copy them to user space, or compile as admin (which, for good reason, is not a given option).
${MementoSection} "Script Examples" SecExample
SetDetailsPrint textonly
DetailPrint "Installing Script Examples..."
SetDetailsPrint listonly
SectionIn 1 2
SetOutPath $INSTDIR\Examples
# shortened by the author of this post
${MementoSectionEnd}
Source:
makensis.nsi, lines 279-335
It's my understanding, that in a post-XP world, Examples (and arguely other folders, e.g. Contrib) should be installed in $APPDATA (or $LOCALAPPDATA). Again, to preserve backward compatibility, this could be conditional. I remember, the last time I recommended this, it was countered with the question how the NSIS installer would deal with an update.
Seriously? How are Plugins treated in 3.x? Their folder structure has changed as well!
1. NSIS currently
recommends uninstalling a previous version before continuing installing a new version. This could easily be enforced or warned about in a major upgrade. Maybe install to a different folder, so NSIS 2.x and NSIS 3.x can co-exist.
2. “NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.”
In any case, for your convenience only, Examples could remain as a shortcut (or even symlink).
Post-SourceForge should be a reality
Yes, I'm biased against SourceForge, I give you that. Yet, I have used SourceForge for more than 10 years, since it provided me good service for most of that time. What bothers me about SourceForge is weak platform performance (how often does the Wiki goes down when you do multiple changes?) and it's uninviting culture to participate. Let's not even talk about them
wrapping installers with their own crapware. I was happy when I saw kichik's
NSIS repository on GitHub. Unfortunately, it's basically as read-only as the SVN repository. From my understanding it uses an automated solution (possibly svn2git) to push changes from SVN to Git. It's a one-way road.
How is that my problem?
Aside from preferring git itself as a version control system, I love GitHub (synonymously used for Bitbucket, GitLab, etc.) for its accessibility. For a small fix, you wouldn't even clone the repository, you can fix a typo in the translation or documentation directly in the browser. You can offer changes through a pull request without needing write access to the repository. You don't need to fumble around with diff to submit a patch. It's so much more transparent and inviting, it's living the open source idea.
(I don't know if NSIS started on CVS. Did you migrate to SVN? What were you're motives back then?)
Would love to get an open-minded discussion going on here.
PS: hopefully not too many typos in here 🙄