<div dir="ltr">Hi everyone,<br><br><br>I decided to take some break after the initial mail in this thread to get my minds together about the current state and the future of Horizon.<br><br><br>I was asked about Reactjs/Angular/Vue/etc framework in Horizon several times during the past few years. My usual answer is something like: it’s great to have it but we don’t have the capacity to do it right now. We’ve got experience with Horizon angularization in the past. It led to missed some features, slower development and outdated JavaScript dependencies. I really love that effort even while I’m not a fan of AngularJS 1.x. New panels look better from a user point of view even if we missed some features we’d got in legacy panels.<br><br><br>Horizon’s mission is to provide an extensible unified web-based user interface for all OpenStack services. We want to have good UX for everybody and cover as many features as possible. We should care about plugins too. Unfortunately, plugins teams are missing contributors each cycle too. So we need to have as simple solution as possible.<br><br><br>We can’t ignore the JavaScript part of our project. It’s not an option to have some classic Django-based application with very few JavaScript dependencies. Users want to have a modern web application with good UX.<br><br><br>Sooner or later we will switch to some NPM-based application. It's the only way modern web applications could exist. I do understand all the reasons why operators and packagers don’t like it. Sometimes, I don't even like it either. Maybe it will be good timing to move to container-based deployment or use something like ‘nodeenv’.<br><br><br>The reasons why we need NPM packages it’s JavaScript development infrastructure. Any new library is packaged for NPM. You can not find any good manual on how to do something avoiding NPM at all. If we want to attract new UI developers, we have to switch to new technologies which are a standard in a world of web development.<br><br><br>Speaking about Horizon's future, there is something I would like to have some time. It’s only my personal opinion, so I’m open for other suggestions too.<br><br><br>I would like to have a Horizon project as a framework for OpenStack Web UI. It should contain some really simple mechanism to generate views for API resources using OpenstackSDK inside. It means we can easily add new pages for new resources just by adding some JSON/YAML config file to describe new entities. Such auto-generated views could be customized with HTML/CSS/JS using whatever framework we choose (React, Vue, etc). Only “edit” and “create” features should be implemented for this scenario. If you care about performance, we should support Server Side Rendering (SSR) to allow Horizon work on any device or a VM.<br><br><br>I don’t think Horizon can drop it’s “backend” to allow UI call APIs itself. Sometimes we have to do some preliminary processing for API responses, in other cases, it could depend on networking configuration and security reasons. We can argue if such a solution is fast enough or not but it’s something we need to have to provide everything we need for UI.<br><br><br>Of course, we should need to care about plugins too. Once we decide to implement Horizon Next, we have to re-implement each plugin too.<br><br><br>It’s a huge effort and I hope someday the community will be able to do it.<div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr"><div><br></div><div>Regards,<br>Ivan Kolodyazhny,<br><a href="http://blog.e0ne.info/" target="_blank">http://blog.e0ne.info/</a></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 23, 2020 at 4:21 PM Thomas Goirand <<a href="mailto:zigo@debian.org" target="_blank">zigo@debian.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 6/23/20 2:32 AM, Adrian Turjak wrote:<br>
> Unless you are reviewing all the code yourself before packaging it<br>
> (which sounds impossible)<br>
<br>
Since I'm packaging all of OpenStack, no, that's not possible! Though<br>
I'm hoping that everyone that's actually using a particular piece of<br>
code in OpenStack is potentially someone who could raise a security<br>
concern in this list. There's also the Debian security team which<br>
constantly reviews CVEs, and fills bugs against my packages when needed.<br>
<br>
All of this would go away if we switch to "npm install ... and forget"<br>
kind of model.<br>
<br>
> the most you can really do is follow:<br>
> <a href="https://docs.npmjs.com/packages-and-modules/securing-your-code" rel="noreferrer" target="_blank">https://docs.npmjs.com/packages-and-modules/securing-your-code</a><br>
> Or any other vuln scanning toolkits.<br>
<br>
The part here that says:<br>
<br>
"Auditing package dependencies for security vulnerabilities"<br>
<br>
would clearly not be possible with 600+ npm dependencies (like gitlab<br>
does, for example).<br>
<br>
>> In Python, at least, there's a central repository, with administrator<br>
>> (trying to?) keeping things safe, and the chain of dependency isn't THAT<br>
>> insane.<br>
> <br>
> Oh the js ecosystem is totally broken, but that's what we have to work<br>
> with, that's where the world of front end interfaces is right now. The<br>
> best we can do is work with it/around it. :(<br>
<br>
Yeah. We absolutely *DO NOT* need to adopt all the bad practices, and<br>
the best we can do, is work around them. This includes avoiding the<br>
dependency hell by well selecting which libraries to depend on.<br>
<br>
> But really pip isn't much better.<br>
<br>
In Javascript, even if a function ABI is backward compatible, there's no<br>
guarantee of what that function/method will return. The result is<br>
unnoticed brokenness at many levels.<br>
<br>
> You still really want to be auditing<br>
> your pip and npm libraries versions against known vulnerabilities.<br>
<br>
Yeah, just like any other language. Any given program is as weak as its<br>
weakest dependency.<br>
<br>
> I don't have a solution, but packaging each npm dep for an application<br>
> that is ultimately a js blob that can be compiled anywhere feels kind of<br>
> redundant to me. I can understand the need for golang or c libraries<br>
> that need to be compiled locally because a binary compiled somewhere<br>
> else may not work depending on host differences, but js is js, and where<br>
> it is compiled doesn't matter one bit really for where it will run (the<br>
> browser).<br>
<br>
In this decade, mostly everyone is actually compiling JS and<br>
concatenating libraries into a huge file. In this regard, JS is no<br>
longer any different from other languages. I'd say it's comparable to<br>
Go, since every program is actually bundling (which is equivalent to<br>
statically linking) all the libraries. I'm super satisfied that for<br>
Horizon, we found a nice way to do that (ie: at package install, and<br>
using triggers whenever a JS dependency package is updated, so that it<br>
can be rebuilt).<br>
<br>
Do you think JS are a special case? They also *must* be free software,<br>
and easily patch-able, just like any other piece of code.<br>
<br>
> The biggest thing for me is that Horizon or any eventual future<br>
> dashboard for OpenStack needs to adopt modern js standards, frameworks,<br>
<br>
Yes, but not at all costs.<br>
<br>
> and development processes to remain relevant.<br>
<br>
If by "development processes" you are referring to the "npm install and<br>
don't care" pattern I described above, then hopefully, that's not what's<br>
going to happen.<br>
<br>
> Having downstream<br>
> maintainers as one of the reason against ever going in that direction,<br>
> makes ever reaching that future much harder. :(<br>
<br>
Who said security and maintainability is easy? :)<br>
<br>
Last word (and repeating to make sure my ideas are reaching): this is<br>
*NOT* a downstream distribution concern *ONLY*. :P<br>
<br>
Cheers,<br>
<br>
Thomas Goirand (zigo)<br>
<br>
</blockquote></div>