-
Notifications
You must be signed in to change notification settings - Fork 128
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
Suggestion - Please make a Linux native version #2862
Comments
Especially with Valve's Proton/Steam Play now getting so many games, including many serviced by Nexus' mods, running as or nearly as easy as on Windows. And for non-Steam games there's Lutris that takes a lot of the hassle out of managing Windows games on Linux. |
Vortex is built on technologies that are also available on Linux (and MacOS), except for a few native libraries that would have to be re-implemented (stuff like reading the application version from a .exe file). |
I was looking through the code "lightly" I don't pretend to know what I'm doing/saying. It appears as though the only "windows" dependency left is Nexus/wholocks which could be replaced by https://www.npmjs.com/package/@ronomon/opened or something similar. Everything else at the moment looks OK. I am not sure when I will be competent enough to make a PR. if there are any Node/typescript masters out there, this could be a cool feature. |
Vortex Version: 0.16.15 Or at the very least some documentation put into getting every thing up and running under Linux, since Vortex does seem to run fairly well under WINE. Reported by: Dreae |
I doubt that steam play / wine would work well on vortex as it uses undocumented windows apis. Just a heads up. |
It works very well, actually. You can either install it directly in your game's prefix to manage that game (and subsequently install it in to each game's individual prefix that you want to manage), or set up it's own prefix and use symlinks to point it at each game install. I've currently got it managing Skyrim SE and installing mods is no problem. The only real issue is SKSE64 (and F4SE) doesn't work under Proton or Wine yet. There is a patch you can use and manually compile both Wine and Proton to get the script extenders working. But Vortex itself works pretty much flawlessly. Since Vortex is using sym/hardlinks instead of MOs virtual file system, a native Linux version should just need to know where the games are installed and use Linux's link command instead of Windows' (ln vs. mklink). |
There's a magnificent individual that did this Nexus-Mods/node-wholocks#2 I got vortex working in wine, so it "works" but a native version would still be an interesting prospect for some. |
Getting Vortex to work on Linux would really kick up Linux as a viable alternative for gamers who are tired of Windows.. of which there are many, myself included. |
I'd love to assist this issue and devote time to solving it but a hurtle I'd have to overcome that I'm not willing to do at the moment is going through the process of learning TypeScript. I'm curious as to why that was decided to be the base language of the project vs C/C++, C#, Java, Python ect? |
TypeScript is a much easier language to learn than C++, C# or Java and less "unusual" syntax wise than python. |
A few things.
Update As far my third point I started going through the list on electron wiki of electron based apps and realized their not all javascript based. I'll add it to my to-do-list to try to help with making this project Linux native. :) |
I'd also be interested in working on this; but unless I can figure out which components are os-specific without needing to read through the whole project; it'll be hard to prioritize. If you can point out any of the relevant areas in the code; it'd greatly lower the barrier to contributing. Or potentially add inline markers (e.g. |
In addition to what @Patricol said can you confirm whether or not having a Windows system is a requirement to figure out some stuff? (I don't run one anymore other than wine) |
@codeman101 We'd need to test that our changes don't break the Windows version, so I'd say yes. |
A few examples of how Vortex might require and use platform dependent code:
Tbh.: My advice to anyone trying to work on a Linux version: Start by setting up a fork for working on Linux compatibility, start by trying to build it. Investigate build errors if there are any, fix them in a way that hopefully doesn't affect the windows build, when you have a running build, test the stuff that is intuitively more low-level (stuff like getting at the icons for executables, searching disk, creating links) Also: the parts that are most likely require work are native modules we created, not the Vortex repo itself.
are bound to require platform-specific code that is either not implemented for Linux or not tested. |
I made a fork of the project last night. Although at the time it was out of anger over the comment Patricol made in response to my question about needing to run windows. Although now thinking about it more I suppose I can run a VM of a windows preview build to test it. Due to the fact that the program is using the registry to detect the games the only way I can see to make it cross-platform is to have the program detect which OS it's running and do a recursive search of the users home directory for the Linux implementation. Edit: Also you claim that having the program use the registry to find games is faster but I just remembered from when I ran windows that although that may be true it didn't get all of the games. I realize now that the design trade-off is "should we do an implementation that would make game searching really fast and use something that is windows dependent or do an implementation that would be slower but more cross-platform friendly." Personally I don't feel the the correct tade-off decision was made for two reasons.
|
@codeman101 we're not debating design decisions here. Just let me make one thing very clear here: I'm open to a Linux version but no trade-offs will be accepted for the Windows version. 0. Zilch. second: Please educate yourself. Seriously, it's getting pretty annoying discussing with you because you insist on discussing about things you don't fully understand. Vortex has custom detection code for all games, usually with fallbacks. Every game that Vortex tries to detect through the registry does get detected immediately (within less than a millisecond), the only people having problems with that are those that insist on mucking about manually in their registry or move games around manually instead of doing it properly. You seem intend to construct an excuse for changing core functionality because you think it would make cross-platform support easier. a) It wouldn't b) it will not happen anyway. |
@codeman101 My apologies; I didn't intend for my last comment to be abrasive in any way. |
All good. I feel like some good has come out of me making my own fork because it's forcing me to learn the Windows API which has always been on my to do list anyway for the desire to help wine development. I agree. I will not argue with you anymore. Let's just agree that we have fundamental differences as to how we would've approached this project and move on. If I'm able to convert the necessary submodules to Linux code (which by the way aren't the ones you listed above) I'll post links to my changed files here. Unfortunately that's the best I'll be able to do as I copied a branch that makes the project ad-free. (one of the fundamental differences) Again I don't want to argue anymore I'm just explaining why my changes won't be mergable. Since this difference prevents my changes from being mergable anyway I'm going to try to covert the code into a pure Linux version (overwriting the Windows API code) All and all I'm glad I forked this because as I said before it forces me to learn the windows API so even if someone beats me to punch of making this Linux compatible at least I got quite a learning experience out of it. Oh also I'm sorry for what I said in the pull request. I didn't read the whole post of your first response and I've come to agree with you about that request. |
Just try to be more understanding. We're all human, and attacking people (and/or their views) left and right will get you nowhere in life; regardless of whether or not you are correct. |
While trying to work on making the project Linux native I realized something and made this issue on proton (explained in issue) ValveSoftware/Proton#2670 and because of that I've decided to delete the fork I made since as far as I can tell it would only benefit native Linux games. To future readers who still want to make this native for Linux
Search
in the Nexus-mod github page to find all the modules that have this header file. |
esptk, bsatk and ba2tk are all for gamebryo games (TES, Fallout) which don't run natively on Linux anyway. Tbh if you're playing a game through wine on Linux, I would also run Vortex through wine and use native Vortex only for native games - things are just going to be too complicated otherwise. I imagine there is a lot of grief down that rabbit hole. |
Oh ok.Well if someone tries to make a native Linux version of vortex they'll need to do something about them because
Yes I know but I didn't realize it until my previous post because I was actually trying to run TES via proton from the native steam client and then realized it'd make more sense to install vortex into that proton install of TES (hence the issue I linked to in previous post)
Fortunately since the games aren't Linux native anyway this isn't an issue since you'd have to use a wine backbone to run the game so you can install the windows version of vortex into that bottle. (which is a feature being worked on for proton see link above) Side note: I'm going to see if the wine database has reported this bug but I was reminded by my computer tonight that currently vortex doesn't run on wine past installation regardless of install the dotnet version mentioned in the one review on the database. Edit: I made the bug report for it on the wine database. |
esptk, bsatk, ba2tk and gamebryo-savegame are all libraries pulled in from extensions: gamebryo-plugin-management, gamebryo-savegame-management, gamebryo-archive-invalidation, gamebryo-... The best place to do that is probably in "BuildSubprojects.json" and "BuildSubprojects.js". Then, to start off, just mark all subprojects as windows only, try to build. |
As one of "the LOOT people", I’d just like to point out that LOOT actually has built Linux native binaries for years (available on Bintray). While it is true that it by default assumes Windows‐ness, it shouldn’t err out if not run on Linux and should be able to sort load orders for Wine/Proton installed games given the right settings. I’m not sure if we’ve actually had anyone do this yet, but it should theoretically be possible AFAIK. :) (This also means it should be possible to also use LOOT(/ |
I just tried doing exactly this, I actually got the main UI working. That being said, the dashboard threw this error when it tried to render, and I can't actually set a game mode (as well as a slew of minor issues). |
You can query that from the UI and record it in the file, here's an example in JSON:
|
What if you have to run a third-party tool, like fnis or bodyslide or OpenIV as part of the modding process? That would probably have to run through wine too if it's not supported natively. |
Sounds to me like Vortex for Linux (or Vortux) would require Wine as a dependency at the very least by default. While getting Vortex itself to work natively on Linux is the bare minimum I would expect, everything else that is not a native Linux application would have to be filtered through Wine. |
No, this didn't throw an error because other issues were encountered sooner at runtime. As I said in the disclaimer, the examples I used were selected because they're quick and obviously wrong, not because I ever actually encountered it as an error at runtime. What did throw an error was GameStoreHelper.
My point has consistently been that Vortex doesn't reveal problems soon enough. The relaxed tsconfig settings literally ignored thousands of issues. Simply, the interface should never have possibly been undefined.
I am not saying to not provoke a compile time error. In fact, I have been clear that it needs to be a compile time error rather than a runtime error. The problem with that code is specifically that it does not provide a compile time error which is actually useful. Instead, tsc warns that those properties of the api are being assigned disallowed values (undefined). Discussion of the unit tests is irrelevant to what I was pointing out.
Then use an
Explicit is good! proceeds to import and use an abstraction for an operator
I do understand it. You know I understand it. I wouldn't have said 'I don't see how calling toString is better' otherwise. If lodash has this and is a direct dependency, why are you not importing and using that instead? None of the reasoning in your reply is sound.
I'll amend my previous statement, this one reply does make sense. |
I want mom and dad to stop fighting |
It's okay, we do understand each other sometimes. |
That is literally incoherent gibberish. You're saying at the same time you didn't get an error, got other errors too and got an error after all...
No it hasn't. If that was the point you were trying to make you failed.
What relaxed tsconfig settings? We have not a single non-default tsc setting that relaxes any standard rules. There are non-default stricter rules introduced into tsc over the years but those would require us to change or rewrite existing and tested code which would be completely mental.
No, you haven't. You complain about the compile time error and then claim it was obvious you wanted a compile time error.
Nope, that code gives you a build time error if you introduce a new function for that interface and don't assign it. This is the only "static" instance of IExtensionContext so this is the only way to achieve this in the absence off unit tests.
No it doesn't, not unless you misconfigured it or run a different version of typescript from the official repo. This code has worked and served its designated purpose as expected for 6 years. Yes, if the compiler changes we may have to change the code to something more complex but not at this time.
Look, if you took a moment at where the function is actually used, you would find it's only used on data marshalled from c# code, to align 1:1 with calls to the c# function "isNullOrWhitespace" https://learn.microsoft.com/en-us/dotnet/api/system.string.isnullorwhitespace And yes, if the code was written today, the type should have been "string?", but at the time we started, nullable syntax didn't exist in typescript, that was introduced later, all variables were implicitly nullable.
We don't, we receive something that by documentation should be a string but because of serialization we can't rely on the types to be verified automatically. Not the same situation.
Again: That code was written when that was literally how typescript worked, all types were nullable.
Maybe look up what "explicit" means?
No, I really don't.
Because lodash is a heavy dependency and I'd rather have a one-line function than unnecessary dependencies. We do use lodash, doesn't mean I want to import it in every single source file.
Again, just because you don't understand doesn't mean it's wrong. |
Again, as long as it's stored in the symlinked ~/.vortex directory then it won't matter if a 3rd party tool is needed, the vortex.exe that is launched inside wine can launch it without issue |
I'm reading a lot of "simple", "easy" and "trivial" here. Makes me wonder why this ticket is still open 4 years later and all contributions we got were all a few build system fixes, many of which would have broken more than they'd have fixed. ;) |
To be clear, what I specifically was speaking of isn't necessarily an indicator of difficulty but rather willingness of an individual to actually tackle specific issues that prevent this from happening. I'm sure there are probably people willing to do so, they're just probably not in the Nexus Mods community to actually care to do them. That's apart from the build system, though; I won't saying anything on that topic since I don't personally mess with build systems for projects like this. |
Does Vortex even guarantee that launched third party apps like OpenIV will work on Windows, let alone Linux? To my knowledge, Vortex already facilitates it at the user's own risk/without official or direct support of the application itself. If OpenIV or Wyre Bash suddenly stopped working on Windows 11 in spite of Vortex continuing to work, I don't think Vortex would be too inclined to do any more than it would do for Linux, that is, tell people to go talk to the third party app makers. |
Hence why Wine would be required so Vortex can ensure all Windows applications try to hook through that, but with a "caveat emptor" of no guarantees this will function perfectly. Way I see it, that's the best Vortex under Linux could do for third-party apps like that. |
My point is simply that the obsession over guaranteeing third party apps on Linux is just weird because Vortex never guarantees third party apps work. |
All my forks of Vortex and its extensions have been published. |
Man this is a long thread. So what exactly is the current barrier for having Vortex be native on Linux? The UX through WINE right now is utter pain, and the "demand" for this is only going to go up. Especially with the success of Steam Deck (and that's definitely not going away at this point). |
Currently Vortex uses build tools which are deprecated (and/or no longer supported) and is not configured for cross-platform builds. Electron builder, the release platform, has limited support for newer build tools (basically legacy package build configuration modes only). Also, Vortex has many custom libraries (extensions) which need to be updated for cross-platform support. In some cases that is/was trivial. In others, it means writing alot of stuff from scratch and/or landing new dependencies. In terms of current runtime/direct dependencies, Vortex is critically outdated; some core depends are 2-3 major versions outdated. Until webpack gets support for 'Universal Chunk Loading' (switch from CJS require to ESM and CJS compatible import), upgrading to newer depends will be rough at best, impossible at worst. We may be waiting till webpack 6. Rome might even be available by then. I might try completely switching to esbuild or Rome. Vortex has some other issues, but most of the actual codebase will only need a few fixes. It's getting the the right environment setup for the project to build consistently that's the issue. See the latest edits to the Vortex readme for examples of flaky build tools. My fork uses newer build tools and completely overhauls the build process to leverage the bundler alot more, but cannot start or package. There's alot to be done in Vortex adjacent projects before Vortex can do anything meaningful about the current situation IMO. I can understand why Nexus Mods App is getting dev time as the alternative, I just think that dev time could have been spent contributing to Vortex's upstreams to improve the situation rather than dump Vortex... |
Depends on who you ask. As you see in NicBOMBs reply, he spends a lot of time forking projects and rewriting the build configuration, none of which is necessary to get a native build going. He's just selling his preferences as a necessity. There is no actual barrier to having Vortex build natively on Linux, I suspect that could be done in an evening if the person doing it would actually focus on that. Further, there is a lot of problems to solve that aren't purely about creating a native build, various parts of Vortex would require a complete separate code path to support games being emulated through wine/proton when Vortex itself is running native, e.g. because the paths Vortex sees would be in linux syntax (/mnt/e/games/foobar) whereas the game uses windows syntax (e:\games\foobar). |
While I'm sure this is far from the only issue, I'm pretty sure WINE will translate paths on the fly with little-to-no issue. I'm pretty sure of this because the file picker in WINE supports both the Windows and Linux Syntax within Vortex under WINE, and plenty of non-native games will naively show or accept the non-Windows syntax.
To be fair, this is not a Linux-specific issue and would largely apply to Steam Deck running Windows as well. It's a handheld and would need an interface accessible to a handheld. Whodathunkit |
The problem isn't just the syntax, windows itself supports both backslashes and forward-slashes, the problem is that the path is different. As in That translation can't possibly be done correctly and automatically by wine.
It's not a surprise to anyone but it's still time that someone would have to spend on it, time they're not spending on something that benefits the other 99.5% of our user base who are not modding on a handheld. |
I've yet to see an application actually have issues with this.
I personally don't think the current interface is so unfriendly as to be worth overhauling. |
I dont have a device small enough device to make changes for the Steam Deck visually. Yarn classic is outdated, though I agree updating that specific depend is not required, not being able to update it or use the latest package managers imposes other build constraints mentioned prior. This drive path name concern is unnecessary. WINE definitely works just fine crossing drive paths from C:\ to /path/ . You are saying this is one of the problems Vortex will have, but I already used posix paths in Vortex under WINE just fine. Don't scare off your own users with the non-issues. There certainly are issues, just not that. |
I've run plenty of game installers and simply selecting the right folder allows them to run just fine. Unless the code is seriously spaghetti it shouldn't be more complicated than a single line change, or even just offload that work to the user and have them manually select the locations. While that route is suboptimal, it might simplify it a bit since IIRC steam does some weird shit with it's prefixes that might cause issues. It's still not toooooo hard to solve for, you'd just need to iterate through the possible steam prefix folders (ideally still allowing the user to say where the steam folders are just in case) and then search for games like is done natively on windows. In other words, having used Wine/Proton extensively, the only issue that you're likely to have is locating the prefixes as every program I've ever used has been able to seamlessly operate inside of a wine prefix. (in terms of file operations I mean) Depending on exactly what you mean here it could be a bit more complicated, but if I'm interpreting what you mean correctly it literally ought to be just finding the right offsets to apply (e.g : /home/user/.steam/~PathToPrefix/drive_c/~RestOfThePathLikeNormal) and then iterating through the prefixes to search for games. (and maybe adding a section in a settings window to let the user manually add additional prefixes to search through) One thing to keep in mind though is that the steam deck DOES have a traditional desktop UI in the form of KDE. It's not ideal, but if focus is simply put on getting vortex to work on linux first, a steamdeck dedicated UI can come second. While navigating a traditional UI on a steamdeck sized screen isn't optimal, it's entirely possible, so if getting a dedicated controller friendly UI is getting in the way of having vortex be functional on linux at all, it definitely is better to just drop the UI. It's better to be able to mod your games, albiet through a big of a cumbersome UI, than to just not be able to. (and this is ignoring the fact that, with proton becoming as good as it has, many people are just switching their gaming computers to linux as well) |
I was too lazy to read through all of this thread but I here to vouch for linux support, as a current linux user I WISH to use vortex mod manager and am not able to. NO I WILL NOT SWITCH TO WINDOWS, NEVER. |
I think the solution at this point is probably going to be to just wait until Nexus-Mods/NexusMods.App is ready and then use that since it looks like it will support Linux in some shape or form from day 1 (even if it is only via CLI or something, see the issue). I think the work needed to bring Vortex to Linux is probably more than is needed for an MVP of the Nexus Mods App at this point (from the POV of an outside observer at least). |
Thanks for pointing to that! I'll go sub to that ;) |
Hi all, Thank you for your contribution and patience relating to this request for Vortex. You may have seen our recent news post letting our users know that we are currently working on developing a successor to Vortex; Nexus Mods App which will deliver the next generation of mod management. With this in mind, we are undertaking a review of all outstanding Vortex requests to determine their validity. As a result, this request will be closed here as we are implementing Linux support for the web app, see this linked epic within the web app teams backlog: Nexus-Mods/NexusMods.App#148 (comment) Once again, thank you for being an active member. If you missed the news post, you can read it here: https://www.nexusmods.com/news/14874 |
Vortex Version: 0.16.15
Memory: 15.61 GB
System: win32 x64 (6.1.7601)
Please make a Linux native version so that I don't have to just run it through WINE.
Reported by: AmayaSasaki
The text was updated successfully, but these errors were encountered: