Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alternatives to NSIS #646

Open
jaimergp opened this issue Feb 8, 2023 · 7 comments
Open

Alternatives to NSIS #646

jaimergp opened this issue Feb 8, 2023 · 7 comments
Labels
os::windows relevant to Windows stale::recovered [bot] recovered after being marked as stale type::tech-debt identifies or resolves some technical debt

Comments

@jaimergp
Copy link
Contributor

jaimergp commented Feb 8, 2023

I think it's safe to say NSIS is not the most development friendly engine ever, specially coming over from the Python world. While incredibly performant, powerful, customizable and extensible, it comes with a few gotchas:

  • Tricky to debug and test. The hoops we go through in the run_examples.py showcase this nicely.
  • Difficult-to-obtain logs. No output in stdout!
  • Scripting syntax is sometimes too low-level.

Ideally, I would love to see if we can find a replacement with the following features:

  • Free and redistributable (and open-source?)
  • Scriptable in a sane way that allows us to run custom code
  • Customizable and extensible UI (branding, text, extra pages)
  • Good development/debugging experience (CLI installs should be as informative as GUI ones)

This website (plus this one) has TONS of info about the whole landscape. I'll summarize the main findings here, focusing on free products:

I think both WiX and InnoSetup might be capable replacements, but none feels like The One ✨ either. Both have good CLI options. WiX uses MSI under the hood, which might be better for corporate users. InnoSetup seems closer to NSIS in spirit, with Pascal Scripting.

So, to sum up, no obvious answer.

@jaimergp jaimergp added os::windows relevant to Windows type::tech-debt identifies or resolves some technical debt labels Feb 8, 2023
@jaimergp
Copy link
Contributor Author

jaimergp commented Feb 9, 2023

On the CLI-only side, I can see some tools (scoop) are using combinations like:

  • Powershell irm fetches a script and pipes it to iex (e.g. irm get.scoop.sh | iex).
    • This is like wget script.sh | sh in Unix world.
    • Not that we need to pipe, but we could follow scoop's setup for a CLI-only installer.
    • We would need to reimplement many of the features.
    • No uninstaller though, but that's on Revisit uninstallers #642

@RahulARanger
Copy link
Contributor

RahulARanger commented Feb 25, 2023

Hi @jaimergp, I have a bit of experience with Inno setup.

It would be possible to cover the cases with the Inno setup, it is due to the fact that we can write the scripts with pascal, or if required we can take control of the required things using PowerShell.

I have worked on a Project It was packaged using Innosetup.

If possible, can I try to contribute to this?

@jaimergp
Copy link
Contributor Author

Hi @RahulARanger, that's very exciting!

I'd say we approach this with some caution though, because it would add some maintenance burden to a team that's already stretched a bit too thin. I'd like to know what @conda/constructor thinks about it.

Ideally, if you ask me, I would envision something like constructor offering some kind of plugin mechanism so users can use other "installer backends", and then you could maintain your own plugin facilitating that. Given enough time and if it gets a lot of traction, such a plugin could be "absorbed" in constructor itself. But of course, that plugin system does not exist right now so I might be dreaming a bit too much :D

@RahulARanger
Copy link
Contributor

True, it is hard to build a plugin system and even expect the same in the other platforms.

@jaimergp
Copy link
Contributor Author

An intermediate step for our own sanity is to rebuild the NSI templates with some Jinja, like pynsist is doing. Quite cleaner!

Copy link

Hi there, thank you for your contribution!

This issue has been automatically marked as stale because it has not had recent activity. It will be closed automatically if no further activity occurs.

If you would like this issue to remain open please:

  1. Verify that you can still reproduce the issue at hand
  2. Comment that the issue is still reproducible and include:
    - What OS and version you reproduced the issue on
    - What steps you followed to reproduce the issue

NOTE: If this issue was closed prematurely, please leave a comment.

Thanks!

@github-actions github-actions bot added the stale [bot] marked as stale due to inactivity label Jun 13, 2024
@jaimergp
Copy link
Contributor Author

Not stale

@github-actions github-actions bot added stale::recovered [bot] recovered after being marked as stale and removed stale [bot] marked as stale due to inactivity labels Jun 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
os::windows relevant to Windows stale::recovered [bot] recovered after being marked as stale type::tech-debt identifies or resolves some technical debt
Projects
Status: No status
Development

No branches or pull requests

2 participants