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

Ubuntu 20.04 is not supported? #321

Open
Zizaco opened this issue Jan 28, 2024 · 17 comments
Open

Ubuntu 20.04 is not supported? #321

Zizaco opened this issue Jan 28, 2024 · 17 comments

Comments

@Zizaco
Copy link

Zizaco commented Jan 28, 2024

First of all, thanks for the great work. Webui is an innovative project that takes a fresh approach to creating UIs with web technologies.
Now, the issue that I have is: Ubuntu 20.04 has glibc 2.31.

When I try to use webui I get the following error:

Error: Could not open library: Could not open library: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/zizaco/Projects/deno/deno-webui/src/webui-linux-gcc-x64/webui-2.so)

From v2.4.2 - v2.0.2, all versions required glibc 2.34 or 2.33. I guess Ubuntu 20.04 is not supported then?
Unfortunately, that contradicts the promise of being "Portable" of Webui.

Is there any chance of a release that works with glibc 2.31?

@jinzhongjia
Copy link
Contributor

jinzhongjia commented Jan 28, 2024

you can use zig to compile this, it should use glibc 2.31 correctly

just download zig 0.11 or nightly, then git clone webui, goto the directory, and run zig build -Dis_static=false -Denable_tls=true, this will compile webui wtch tls support(dynamic link library)

The build results can be found under zig-out/lib

@jinzhongjia
Copy link
Contributor

according to this issue: ziglang/zig#4459, zig should support glibc 2.31

@Zizaco
Copy link
Author

Zizaco commented Jan 28, 2024

Thanks, I'll give it a try!

Having releases that are more widely compatible would be a plus. Do you find it reasonable to have .github/workflows/linux.yml use zig by default?

@jinzhongjia
Copy link
Contributor

I think it's a better choice to use zig as a toolchain build, but that's up to @hassandraga and @ttytm decide
However, if webui itself does not provide libraries compiled by zig, it may be possible to provide libraries compiled by zig in the downstream zig-webui.

@Zizaco
Copy link
Author

Zizaco commented Jan 28, 2024

indeed, zig is well-known for allowing cross-compilation of popular projects. I found it a very reasonable approach. @hassandraga @ttytm I would love to hear your thoughts on this

@AlbertShown
Copy link
Contributor

I think Zig is an excellent build system, but webui is very simple to build. It has one .c file. You can build webui by simply cloning and running make. So, asking all developers to install Zig is an overkill.

On the other hand, some developers want to integrate webui as a submodule in their repo, so some need Zig, others need Cmake, Ninja... that's why it is a good thing to have those build systems as well.

To fix glibc issue, you can re-compile webui. But I guess to officially support the old glibc version, we should modify linux.yml from ubuntu-latest to ubuntu-18.04, this way we will be sure that webui will work with old glibc version and also the latest one.

@halildgn
Copy link
Contributor

halildgn commented Apr 23, 2024

I think Zig is an excellent build system, but webui is very simple to build. It has one .c file. You can build webui by simply cloning and running make. So, asking all developers to install Zig is an overkill.

On the other hand, some developers want to integrate webui as a submodule in their repo, so some need Zig, others need Cmake, Ninja... that's why it is a good thing to have those build systems as well.

To fix glibc issue, you can re-compile webui. But I guess to officially support the old glibc version, we should modify linux.yml from ubuntu-latest to ubuntu-18.04, this way we will be sure that webui will work with old glibc version and also the latest one.

@hassandraga @AlbertShown I really appreciate any help, do we have any updates on this? I use python version of webui2 and I really need this for my bachelor thesis. E.g. on newly installed ubuntu 20.04 even with installing the updates, you still get the glibc 2.31 and webui2 fails. I need users to be able to use my app out of the box just by installing the python packages and not the operating system dependencies. It currently works out of the box on Windows and MacOS but I also need to at least support Ubuntu and updating glibc is not the easiest thing for some casual user since it is one of the core libraries:(

@AlbertShown
Copy link
Contributor

To fix glibc issue, you can re-compile webui. But I guess to officially support the old glibc version, we should modify linux.yml from ubuntu-latest to ubuntu-18.04, this way we will be sure that webui will work with old glibc version and also the latest one.

Long term fix

  1. Creating a new PR where linux.yml change ubuntu-latest to ubuntu-18.04
  2. Wait until next stable release of WebUI comes, so Python-WebUI PyPi will be updated
  3. Upgrade your webui2 local Python package

Quick fix / Workaround

  1. Clone WebUI and run make to build it in your Ubuntu
  2. Clone Python WebUI
  3. Copy your local compiled webui-2.so and webui.py into your Python project
  4. Make your project use the local webui.py instead of the installed PyPi package

@AlbertShown
Copy link
Contributor

@halildgn Let me know if you need any assistance.

@halildgn
Copy link
Contributor

halildgn commented Apr 23, 2024

To fix glibc issue, you can re-compile webui. But I guess to officially support the old glibc version, we should modify linux.yml from ubuntu-latest to ubuntu-18.04, this way we will be sure that webui will work with old glibc version and also the latest one.

Long term fix

  1. Creating a new PR where linux.yml change ubuntu-latest to ubuntu-18.04
  2. Wait until next stable release of WebUI comes, so Python-WebUI PyPi will be updated
  3. Upgrade your webui2 local Python package

Quick fix / Workaround

  1. Clone WebUI and run make to build it in your Ubuntu
  2. Clone Python WebUI
  3. Copy your local compiled webui-2.so and webui.py into your Python project
  4. Make your project use the local webui.py instead of the installed PyPi package

@AlbertShown
Thanks a ton, I am going to try these tomorrow, it is 1am here. Two more questions:
1-Do you think that this should work on all x86_x64 linux systems or would it only work on ubuntu? (I did some google research, most people say compiled files shouldn't work on all linux systems but I also researched for so file format, it looks like it is a common format for linux systems, so I wanted to ask maybe it is somehow possible)
2-If you don't mind, could you please share when would be your prediction for the approximate date when the next stable release to take place?

Thank you very very much for responding in such a short time, really appreciate your help.

@AlbertShown
Copy link
Contributor

1 - The webui-2.so file is a dynamic library, it depend only on the standard GNU C library glibc that it is installed in all Linux systems by default, the only issue is the version, so if your Ubuntu has glibc v2.31, then your compiled webui-2.so will look for this version when used in other x86_x64 machines, normally Ubuntu has the new and some of old glibc to support new and old softwares.

2 - I don't know, this is a open source project managed by the community. When majority of open issues get fixed and all new features get tested then a new version should be released, so maybe in a couple of months. I suggest you do the quick around solution for now.

Your main Python script --> include webui.py which it will auto load webui-2.so in the same folder.

├── main.py
├── webui.py
└── webui-linux-gcc-x64
    └── webui-2.so

@halildgn
Copy link
Contributor

halildgn commented Apr 24, 2024

1 - The webui-2.so file is a dynamic library, it depend only on the standard GNU C library glibc that it is installed in all Linux systems by default, the only issue is the version, so if your Ubuntu has glibc v2.31, then your compiled webui-2.so will look for this version when used in other x86_x64 machines, normally Ubuntu has the new and some of old glibc to support new and old softwares.

2 - I don't know, this is a open source project managed by the community. When majority of open issues get fixed and all new features get tested then a new version should be released, so maybe in a couple of months. I suggest you do the quick around solution for now.

Your main Python script --> include webui.py which it will auto load webui-2.so in the same folder.

├── main.py
├── webui.py
└── webui-linux-gcc-x64
    └── webui-2.so

Thank you again Albert, I tried the workaround and I had succcess but I am a little confused right now. From what I understand(Please forgive my ignorance) the linux.yml builds the app probably with CI pipeline after a new release comes around. My question is that even though this builds the files for the whole Linux ecosystem, it uses ubuntu-latest(or in the future possibly ubuntu 18.04), so if I write my code like the following, i.e. only for Ubuntu, does this make sense? Since it looks like that regardless of the linux OS, it uses the Ubuntu builds anyway(it is most likely that I am mistaken though). In short, should I use number one or number two(What I mean is that if linux.yml builds like it only builds for Ubuntu for all linux distributions anyway, wouldn't it be just redundant to only check for ubuntu since even the official remote webui2 builds all linux distros like it is building for ubuntu? ):
1.

import distro
if distro.id() == 'ubuntu' :
# I renamed the `webui.py` file as `webui_ubuntu.py`
    import webui_ubuntu as webui
else:
   # the remote package from pip 
    from webui import webui 
from sysimport platform
if platform == 'linux':
# I renamed the `webui.py` file as `webui_linux.py`
    import webui_linux as webui 
else:
    from webui import webui

@AlbertShown
Copy link
Contributor

When linux.yml build for Ubuntu, it means it build for all Debian based Linux ditro, not only Ubuntu.

The issue we have with linux.yml it's not Ubuntu itself, but, the issue is it use ubuntu-latest which use also the latest glibc v2.33, that's means the compiled webui-2 will work in all Debian based distro but only if glibc v2.33 is installed. Old Ubuntu/Debian still have glibc v2.31.

Your project should simply be like:

# Import local `webui.py`
import webui
MyWindow = webui.window()
MyWindow.show('<html><head><script src=\"webui.js\"></script></head> Hello World ! </html>')
webui.wait()

Files:

├── main.py
├── webui.py
└── webui-linux-gcc-x64
    └── webui-2.so

How to get webui-2.so?

git clone https://github.com/webui-dev/webui.git
cd webui
make

Your webui-2.so will be in /webui/dist/webui-2.so

@AlbertShown
Copy link
Contributor

If you do this, your manual compiled webui-2.so will work in all old and new Debian based Linux distro (including Ubuntu) where glibc +v2.31 is installed, including new versions of glibc due to the backward compatibility features of glibc. The glibc is designed to ensure that binaries compiled against an older version will continue to function on systems with newer versions.

@halildgn
Copy link
Contributor

When linux.yml build for Ubuntu, it means it build for all Debian based Linux ditro, not only Ubuntu.

The issue we have with linux.yml it's not Ubuntu itself, but, the issue is it use ubuntu-latest which use also the latest glibc v2.33, that's means the compiled webui-2 will work in all Debian based distro but only if glibc v2.33 is installed. Old Ubuntu/Debian still have glibc v2.31.

Your project should simply be like:

# Import local `webui.py`
import webui
MyWindow = webui.window()
MyWindow.show('<html><head><script src=\"webui.js\"></script></head> Hello World ! </html>')
webui.wait()

Files:

├── main.py
├── webui.py
└── webui-linux-gcc-x64
    └── webui-2.so

How to get webui-2.so?

git clone https://github.com/webui-dev/webui.git cd webui make

Your webui-2.so will be in /webui/dist/webui-2.so

Thanks again, I already did what you mentioned above and it is already running. I just wanted to ask regarding importing but I understand from your message already that it is fine to just use the glibcv2.31 version for if sys.platform == 'linux' since it is fine for all debian. I did the following since I still want to use the remote pip package for other operating systems, e.g. Windows and MacOS. Summary: Thank you a million, everything works now, I am going to create a pull request for the next release too as you mentioned but I never did such thing before, so I am going to learn how to do it meanwhile:

if platform == 'linux':
# I renamed the `webui.py` file as `webui_linux.py`
    import webui_linux as webui 
else:
    from webui import webui

@AlbertShown
Copy link
Contributor

Oh, sorry, I did not know that your project is targeting Windows and macOS as well. In this case, yes, importing local script only for Linux is the right thing to do. Glad that all works fine 👍

@halildgn
Copy link
Contributor

halildgn commented May 8, 2024

To fix glibc issue, you can re-compile webui. But I guess to officially support the old glibc version, we should modify linux.yml from ubuntu-latest to ubuntu-18.04, this way we will be sure that webui will work with old glibc version and also the latest one.

Long term fix

  1. Creating a new PR where linux.yml change ubuntu-latest to ubuntu-18.04
  2. Wait until next stable release of WebUI comes, so Python-WebUI PyPi will be updated
  3. Upgrade your webui2 local Python package

Quick fix / Workaround

  1. Clone WebUI and run make to build it in your Ubuntu
  2. Clone Python WebUI
  3. Copy your local compiled webui-2.so and webui.py into your Python project
  4. Make your project use the local webui.py instead of the installed PyPi package

PR has been created: #357

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants