Project of the Month, January 2006

NSIS

Description of project

NSIS is a script-based tool for Windows installer development. It is designed to be as small and flexible as possible and is therefore suitable for Internet distribution. Some notable features include multiple languages in one installer, a highly customizable user interface, plugin support, and three compression algorithms -- zlib, bzip2 and lzma. NSIS has a built-in script preprocessor, which can be controlled from the command line for easy integration with build systems.

Trove info

  • Development Status: 6 - Mature
  • Intended Audience: Developers, System administrators, information technology
  • License: zlib/libpng License
  • Operating System: All 32-bit Microsoft Windows (95/98/NT/2000/XP), All POSIX (Linux/BSD/UNIX-like OSes)
  • Programming Language: C, C++
  • Topic: Build tools, installation/setup, software distribution
  • Translations: Albanian, Arabic, Belarusian, Bosnian, Breton, Bulgarian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Farsi, Finnish, French, German, Greek, Hebrew, Hungarian, Icelandic, Indonesian, Italian, Japanese, Korean, Kurdish, Latvian, Lithuanian, Luxembourgish, Macedonian, Malay, Mongolian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian, Welsh
  • User Interface: Win32 (Microsoft Windows), command-line

Why and how did you get started?

Justin: I originally developed NSIS as a fork of a fork of a custom installer that I had built for Winamp. It had a pretty small overhead, and very simplistic features (install files, registry keys, etc). Once I made it reusable, I posted it on our Web site and provided source. People started using it for their projects, and soon patches started flowing in. As time progressed I did a lot of work improving and extending the installer, while taking patches. Eventually, around the time of NSIS 2.0 alpha, I pretty much let others take it over, and we moved to SourceForge (prior to that I maintained the master tree in our own source control server). Since the move I've done bits of work on it here and there, but for the most part I just get to be another satisfied user. :)

Amir: Amir: I found NSIS while searching for a way to create installers for a couple of small projects of mine. The combination of flexibility and tiny overhead fit my needs. While working on my own installers, I was visiting the forums regularly. At first I was just reading and asking questions, but eventually I started answering questions, writing plugins for other users, and then changing the source code. In time, the changes became a community project hosted on SourceForge (nsis2k). After a couple of months, the branch became official and took its current form, maintained on SourceForge by developers outside of Nullsoft.

What is the software's intended audience?

Developers who wish to create installers for their products. We try to keep the basics simple for beginners, but provide high flexibility for advanced users as well.

How many people do you believe are using your software?

There are about a thousand downloads a day, or about 30K downloads per monthly release. However, I still see a lot of installers built with older versions. Version 2.0 was downloaded more than 110K times. I believe we have around 100K users.

What are a couple of notable examples of how people are using your software?

I really like the unconventional uses of NSIS that demonstrate its flexibility. A backup utility, customizable live update utility, a Java wrapper, a simple chat, and even an application for automatically creating installers were all created using NSIS. Beside those, we have high-profile users such as Winamp, Google, OpenOffice.org, NASA World Wind, and past POTMs such as Gaim, BZFlag, Azureus, FileZilla, and POPFile.

What gave you an indication that your project was becoming successful?

Amir: When I first started working on NSIS, it was already quite successful. It became more and more apparent to me as forum post, bug report, and feature request numbers kept on growing. It finally hit me once I saw a simple Google search for "installer" come up with NSIS as the first result. Other indications include a chapter in a book called Pragmatic Automation describing automation of installer creation using NSIS, and bullets about NSIS skills in CVs and job ads.

Ximon: I remember the pleasant shock when I installed a computer game and discovered that it used the NSIS installer.

What has been your biggest surprise?

Amir: My biggest surprise was large companies willing to pay to get new features added, or planned features added faster. I was also amazed that we got invited to judge a coding competition that was part of a Canadian congress called CUSEC. The goal of the competition was to add as many features as possible to NSIS from a set list.

Ximon: The success of the NSIS Web site I created to be home to NSIS scripts and plugins, mainly just for myself since I'm brilliant at losing things. I was swamped with comments and praise to the point where I took a week of my evenings to write something that could be maintained by others via the Web instead of by me and content received by email. It lived much longer than I expected but was rightfully finally retired and replaced by what we have now.

What has been your biggest challenge?

Amir: My biggest challenge was, and still is, technical support. There are so many questions, so many users, and so much to do even without technical support. I believe we are going in the right direction by providing better documentation, more examples, and an incredibly useful wiki.

Another major challenge was releasing new versions, as there are so many features I would still like to add and bugs still pending. It took a while to get from half a year between 2.0b3 and 2.0b4 to the current monthly release cycle.

Ximon: Finding time to give to the project since I left my NSIS job.

Why do you think your project has been so well received?

Amir: I think it's because of the combination of small overhead, rich and flexible feature set, plugin ability, and the famous founder -- Nullsoft.

Ximon: It's small, quick, does what it says, and has a very responsive user community plus great user support from some of the developers.

Where do you see your project going?

The main missing features are support for 64-bit installers and split installers. Automatic generation of uninstallers according to the installer script is also something that we should add.

What's on your project wish list?

I wish for a more streamlined scripting language -- maybe Python-like. Sadly, that would completely break backward compatibility, which we conserve most of the time.

What are you most proud of?

Amir: I'm proud of our small overhead, which got even smaller with version 2. It has been a difficult and challenging task. It's always fun to get a few more bytes off.

Ximon: The enhancements to the plugin system, making plugin calls as friendly to use as normal NSIS commands.

How do you coordinate the project?

There aren't so many developers, so usually instant messaging suffices.

Do you work on the project full-time, or do you have another job?

Amir: I have a full-time programming job, so usually I only have time for NSIS during the weekends.

If you work on the project part-time, how much time would you say you spend, per week, on it?

Amir: I spend about 10-15 hours a week on NSIS. During high school, I spent about 30-40 hours a week, maybe more. I remember sitting in classes and thinking about new features I could add, or more ways to get it smaller. The new paging system was actually conceived during a linear algebra class.

Ximon: When I was active I spent maybe 10-20 hours a week on it, though mostly that was actually writing scripts and plugin DLLs for my work and fixing/improving NSIS as I went.

What is your development environment like?

Amir: I work on an 800MHz Pentium III machine running Windows XP. For POSIX development, I connect, using PuTTY, to my VIA C3 800MHz machine, running Debian. For compilation, I use Visual C++ 6 and gcc (MinGW on Windows). For building, I use SCons. To communicate with other developers, I use Miranda IM.

Milestones:

  • 31/7/2000 -- first public release of NSIS, version 1.0f
  • 22/5/2002 -- first release of version 2 series -- alpha 0, featuring new tree-based components selection
  • 31/7/2002 -- first release hosted on SourceForge -- version 2.0a2, a community branch (nsis2k)
  • 6/12/2002 -- first official release -- version 2.0b0, merging all changes from the community branch, including multiple languages support, Windows wizard UI and easier plugin system
  • 7/2/2004 -- final release of version 2, featuring 7-zip's LZMA compression, many new plugins and an even smaller overhead
  • 24/9/2004 -- version 2.01 adds support for compiling makensis on POSIX platforms
  • 20/6/2005 -- version 2.07 features a new SCons-powered build system

How can others contribute?

Any form of contribution helps. Submitting patches, bug reports, feature requests, or new test cases; fixing or adding content to the wiki; improving the documentation, which is mostly a reference at the moment; and participating in the forum all help.


More projects of the month


Project Name: NSIS

Project leaders:

Name: Amir SzekelyAmir Szekely
Age: 20
Occupation or experience: Software developer
Education: High school, first year CS at Hebrew University
Location: Jerusalem, Israel

Key developers:

Name: Justin Frankel [founder]

Name: Joost Verburg

Name: Dave Laundon

Name: Ximon EighteenXimon Eighteen

Quote about SourceForge.net?

I never cease to be amazed at the number of times I go to download a new tool and find that it is hosted on SourceForge.

Why did you place the project on SourceForge.net?

We placed NSIS on SourceForge for all the great free services.

How has SourceForge.net helped you?

SourceForge provides many free and essential tools with zero configuration time. It has saved so much work for us. Some of the tools we might have skipped, if it hadn't been for SourceForge. Everything an open source project might need was ready for use in less than an hour.

The number one benefit of using SourceForge.net is:

Being free of peripheral tools maintenance and concerns, allowing us to concentrate on what's really important -- the project.