Home

Roadmap for cross platform (ubuntu/linux)?

We are seeing more and more developers using ubuntu + rider instead of windows/vs for .net core development.
The one tool that they are all missing with this stack is linqpad.

I am curious on what the current status for a x-plat linqpad is?

I guess you are still evaluating options for the ui-layer?
Can you provide a rough estimate when we might see an x-plat linqpad? (months, years, decades :-D)

Thanks for a quick feedback.

Comments

  • I'm awaiting a better solution for x-platform UI development than the options we have today. I believe it's likely that something will happen in this space now that we have .NET Core 3. When/if this happens, I will re-evaluate.
  • There is Avalonia which looks fine for the job. You don't need any complicated grids and stuff so it should work just fine.

  • Avalonia doesn't seem very stable at the moment.

    From their site...
    "We're currently in a beta phase, which means that the framework is generally usable for writing applications, but there may be some bugs and breaking changes as we continue development."

  • Anyway it seems better than nothing.

    I switched to Rider and I'm going to switch to non-windows OS soon as well. And I'd like to still use this great instrument. Since netcore has been already embraced in the most recent version it makes sense to make it cross-platform.

  • Right now, I would have to hire a team and budget as much as $500k for a good Linux/macOS/Windows solution. LINQPad is designed to look simple, but there's a lot going on underneath, and a big codebase to make it happen. Features such as "Results to Data Grids" look simple, but that alone took months of prototyping and refining - and considerable messing with Win32 API calls (its architecture also allows for other presentations, such as charting and custom visualizers). The integrated debugger is another hurdle - I seem to remember it was a big deal for JetBrains to make debugging work on Linux. The current LINQPad debugger (which I wrote in 2014) was 8 months' work, to give you an idea. Then there is the browser integration for the results window, which is non-trivial because of LINQPad's support for IObservable/IAsyncEnumerable/Tasks, dump containers, and interactive HTML controls. And integration with the custom editor, to which I've added numerous tweaks and extensions (such as vim emulation mode). All that would need to be completely rewritten (and we've not even got to the main UI yet). And then every subsequent new feature would need to be tested on Windows, macOS, and a variety of Linux flavors.

    I'm not saying that it will never be done, but with the libraries and tools available right now, it doesn't seem viable, especially given that the entire investment could be wasted if a better x-platform model came along in the future.

  • Right now, I would have to hire a team and budget as much as $500k

    It looks really overpriced IMHO. If you cut off 20% of most complicated features away you can have this in less than a man-year.

    It also could be iterative, for example first: very basic features - code interpreter/SQL generation/IL display. It should consist of 99% reusable library code and 1% of simple displaying. It's already something.

    Then autocomplete. It doesn't also seems like very UI-sensitive task. The most important thing is getting list of possible alternatives, then it's just a popup window, which could be different on different frameworks, but it still something as simple as popup.Show(autocompletionText).

    FWIW rider implemented their own debugger cross-platform debugger (because MS license doesn't allow using their own), IIRC it's free and open.

  • I'd stick Β£50 in a kickstarter

  • @mcintyre321 said:
    I'd stick Β£50 in a kickstarter

    Well. Count me in as well.

    I'm off Windows for several years already. Not doing .NET exclusively anymore. But it gets more again. Rider is a joy to use in general. But I really miss LINQPad for many things.

    What is described by @JoeAlbahari above, really gives a bit of insight in the really not visible complexity. Thanks for that.

    At the end, just want to leave my vote here and shout out my love to LINQPad. Despite all the x-plat issues and implications, I would love to see LINQPad x-plat sooner than later. Maybe as a start, macOS first. o:)>:)

    But well, maybe in the not so distant future I'll go back to Windows again. All the movement around WSL 2 seems to make it feasible, sooner than later.

  • edited December 2020

    @JoeAlbahari can we get it to work with MacOS?

    I tried using https://www.codeweavers.com/crossover (Wine?)

    And I almost thought it was going to work. But it crashed.

    When opening the logs it throws:

    INNER: EntryPointNotFoundException - Unable to find an entry point named 'QueryIdleProcessorCycleTime' in DLL 'Kernel32'.
       Source=LINQPad.Runtime
    
        -LINQPad.TaskExtensions Boolean QueryIdleProcessorCycleTime(Int32 ByRef, Int64[]) offset: 0xFFFFFFFF
        -LINQPad.TaskExtensions Int64[] QueryIdleProcessorCycleTime() offset: 0x2E
        -LINQPad.TaskExtensions+<AfterComputeOpportunities>d__27 Void MoveNext() offset: 0x4B
    

    Same thing for LinqPad 5 and LinqPad 6...

    I don't know how hard it might be to adapt, but I think for sure it is easier than rewriting everything from scratch.

    What do you think?

  • That's sound like wine issue. QueryIdleProcessorCycleTime is not implemented currently https://github.com/wine-mirror/wine/blob/master/dlls/kernelbase/kernelbase.spec#L1203 - you can fill issue to wine https://bugs.winehq.org/enter_bug.cgi

  • Hi there, I would also support Linux version of LINQPad in kickstarter if I get it as early as possible. I am leaving Windows as my main dev OS,

    I would be happy with just the basic functionality, just querying databases with LINQ and seeing results without any special features like those Observables etc. Editable grid would be nice, but could do without it - maybe doing the gird in html as editable table? Just throwing ideas..

    Anyway Joe what are your plans, is something realistic or not anytime soon? If not, I might just put together something super simple for my onw needs.. but don't want to waste my efforts if you are planning on bringing LINQPad multiplaform..

  • edited December 2020

    @Dluk said:
    That's sound like wine issue. QueryIdleProcessorCycleTime is not implemented currently https://github.com/wine-mirror/wine/blob/master/dlls/kernelbase/kernelbase.spec#L1203 - you can fill issue to wine https://bugs.winehq.org/enter_bug.cgi

    Yeah It seems that is not implemented. I don't know if it's easier to submit a bug request there or get it working on the Linqpad side, because I'm sure that it won't be the only obstacle to overcome (hopefully not). As I said before, using Crossover/Wine feels, like its 80-90% there from working.

  • @urza - Assuming MAUI delivers the x-platform desktop UI features needed for LINQPad, support for macOS is likely to come before Linux.

    @wocar and @Dluk - I've added an exception handler around the call to the QueryIdleProcessorCycleTime method - this will appear in the next beta build in a few days.

  • Oh my gosh ty very much for the quick response. @JoeAlbahari, I'll keep on trying to run it using wine, hopefully thats the only bug. Thank you!!!!!!!!!!!!! ps: love your program super useful, will try the beta soon.

  • Can we have that beta release @JoeAlbahari published? Thank you

  • Sorry for the delay - it's now published:
    https://www.linqpad.net/linqpad6.aspx#beta

    Let me know if you run into any further problems.

  • Hi @wocar ! Were you able to enter your activation licence on MacOS? This is the only part that seems to be missing on our side.

  • First, @JoeAlbahari thank you very much. Im extremely happy, glad and excited because so far it seems to work very very well. 😍😍😍😍😍😍😍😍😍😍

    As you are for sure aware, being able to run LinqPad on linux/macOS is one of the top features, so it might be a good idea to document this, and give full support using this modality (Wine/Crossover)

    True, it seems the activation isn't working very well @dstjacques and it is kinda glitchy.

    Also exporting to HTML seems to work, it exports the contents correctly but it crashes afterward.

    THANK YOU VERY MUCH @JoeAlbahari I'M SURE THE WHOLE COMMUNITY IS GOING TO SHARE THE SAME EXCITEMENT ONCE THEY KNOW OUR FAVORITE TOOL IS AVAILABLE FOR MACOS AND LINUX

  • Really excited about this! I just need to be able to register for premium features.

  • I've just bought a MacBook so that I can test this out.

    @wocar - Can you tell me the procedure that you used to install .NET and LINQPad 6 on CrossOver?

  • edited January 2021

    Yes of course.

    Buy or install free trial of Crossover here:

    https://www.codeweavers.com/crossover/download#mac

    Install the program, now you will be on the main window.

    Create a new bottle based on Windows 10 64bits.

    You can install programs in that bottle.
    What I did was, I first installed the .NET Framework 4.5 from the predefined list.

    Then I downloaded the .NET Core MSI, and LinqPad MSi. Next I chose the option "Choose an Instaler" and selected those two MSI files.

    Then I right clicked the bottle and clicked "Open C: drive", replaced linqpad with the beta version .

    Now you should see the LinqPad icons in the launcher.

    Tbh I hacked my way in to get it installed because I thought it was a long shot... so I'm sure some steps can be skipped/optimized.

    THANK YOU VERY MUCH @JoeAlbahari

  • Guys, new version of crossover was released today. Now Linqpad seems more reliable. I hope I'm not speaking too fast, but now it seems to work much better :)@JoeAlbahari

  • Html DUMP doesn't work howerver:
    1.- dumping to the grid does, so that is good enough for me.
    2.- if you need html, it seems that exporting to the HTML file works.

  • Does HTML dump work if you check "Use legacy Internet Explorer engine" in Edit | Preferences > Results?

  • Yes, I tried checking the legacy option, restarting and dumping into HTML and still didn't work.

    However I'm very happy because now it seems way more reliable than when using the previous version. Will continue testing it today in real life escenarios. Ty @JoeAlbahari

  • edited March 2022

    I did a little bit of testing, wrote a small post on how to get LINQPad up and running:

    https://william.oban.do/blog/tools/linqpad/crossover/2022/03/23/linqpad-on-mac-os-using-crossover-21.2.html

    Bottom line:
    Do not use HTML Output, always use grid results and LINQPad will be stable βœ…

  • @wocar said:
    I did a little bit of testing, wrote a small post on how to get LINQPad up and running:

    https://william.oban.do/blog/tools/linqpad/crossover/2022/03/23/linqpad-on-mac-os-using-crossover-21.2.html

    Bottom line:
    Do not use HTML Output, always use grid results and LINQPad will be stable βœ…

    Hi @wocar,
    I'd like to thank you, I've tested on pop os with the configs you've described and it's working well so far.

Sign In or Register to comment.