News for hackers. Stuff that matters.
Re:Accidental complexity, essential complexity, and Kubernetes by candiddevmike on Monday September 05, 2022 @05:30PM (#32729725)
Containers are a temporary solution while we wait for everyone to realize self contained binaries with static linking are the real solution.
Re:Accidental complexity, essential complexity, and Kubernetes by tsimionescu on Monday September 05, 2022 @06:16PM (#32730155)
No, containers give you things that static binaries just don't. How do you specify the maximum allowed memory for a static binary? The ports it opens? The amount of CPU usage? The locations it will access from the host file system?

Also, how will you distribute this static binary? How do you check that the result of a download is the specified version, and the same that others are downloading? How will you specify its name and version?

By the time you have addressed all of these, you will have re-implemented the vast majority of what standard container definitions and registries do.

Re:Accidental complexity, essential complexity, and Kubernetes by anonymous_sorry on Monday September 05, 2022 @06:25PM (#32730228)
The orchestrator can still use cgroups for resource constraints and isolation. Or it could use virtualization - it would be an implementation detail. But devs would not have to build a container.

Binary distribution, versioning and checksumming shouldn't need to be coupled to a particular format.

Obviously docker solves a bunch of disparate problems. That's kind of the objection.

Re:Accidental complexity, essential complexity, and Kubernetes by dbxkcichhdfufu on Monday September 05, 2022 @08:03PM (#32730942)
At that point it's not an implementation detail anymore and that's kind of the point.

Static binaries are great but they don't solve every problem and they do to have to.

The vast majority of usecases don't need kubernetes, that's fine too.

You don't have to bash kubernetes because you don't specifically need it for your one use case.

There are plenty of other perfectly valid reasons to bash that dogpile.

Re:Accidental complexity, essential complexity, and Kubernetes by anonymous_sorry on Tuesday September 06, 2022 @03:57PM (#32742427)
> At that point it's not an implementation detail anymore and that's kind of the point.

Not clear what is meant by this. Can you elaborate?

> You don't have to bash kubernetes because you don't specifically need it for your one use case.

It is the platform teams at my employer deploy to, and with good reason. I think we do need it for our use case. But there are ways it could be improved, and the ability to deploy a simple Linux binary feels like one.

Re:Accidental complexity, essential complexity, and Kubernetes by paulryanrogers on Monday September 05, 2022 @09:14PM (#32731452)
AppArmor or SELinux?
Re:Accidental complexity, essential complexity, and Kubernetes by samus on Tuesday September 06, 2022 @02:25AM (#32733630)
These don't solve all those problems. Moreover, it is something already employed by container runtimes.
Re:Accidental complexity, essential complexity, and Kubernetes by abraxas on Monday September 05, 2022 @09:05PM (#32731395)
It's what we did in C in the 80s and 90s and all the young hipsters chose to ignore. This industry loves going in circles.

In the same vein, I also heard that the new data exchange hotness is grpc. Reading a little into that thing it sounds very much like the good, old... CORBA. So many wheels reinvented every decade, sigh.

Re:Accidental complexity, essential complexity, and Kubernetes by antonvs on Tuesday September 06, 2022 @03:45AM (#32734175)
Many of the reasons CORBA failed are the reasons that gRPC is succeeding. CORBA tried to solve the wrong problem at the height of the object orientation fad - it tried to provide a standard mechanism for remote “objects” across languages which have different object semantics. It was a doomed idea from the start.

As for the industry going in circles, it only looks that way if you’re not familiar with the technologies in question. The idea that statically linked binaries are an alternative to containers doesn’t make any sense. In fact, it’s not that uncommon for a container to contain nothing but a statically linked binary. People don’t do that for fun, they do it for the additional features and standardization it provides over a standalone binary.

Re:Accidental complexity, essential complexity, and Kubernetes by zozbot234 on Tuesday September 06, 2022 @06:56AM (#32735362)
Distributed objects had nothing to do with object semantics in a PL. They're a lot closer to what we would now refer to as the actor model.
Re:Accidental complexity, essential complexity, and Kubernetes by antonvs on Tuesday September 06, 2022 @09:52PM (#32745503)
> Distributed objects had nothing to do with object semantics in a PL.

In a way, that was the problem. In practice for CORBA, there was a problematic relationship between its object model and the object models of its host programming languages.

CORBA was supposed to be language independent, but that meant that native language objects and CORBA objects weren't the same thing. There was a semantic gap, analogous to the one between relational databases and object-oriented languages. In the latter case, you can use an ORM-like solution or even just handwritten data access objects to achieve a native language object layer for your data model. With CORBA, that wasn't really feasible - you had to embed CORBA object implementations in your language of choice, and program to that non-native object model. In some ways it's comparable to .NET, but that has the advantage of using a common underlying runtime across all its language implementations. CORBA didn't have that.

You mention the actor model, but what examples are there of successful cross-language actor implementations? The reason for this is exactly what I'm talking about. The practical consequences of a cross-language distributed object model are problematic.

The closest answers I'm aware of share a common runtime - there's Erlang and Elixir both on the Erlang BEAM runtime, and Akka with Java and Scala on the JVM, with variants for C# that I'm not too familiar with. In both cases, the common runtime determines the shared semantics of the object model, so you don't get the same kind of semantic gap.

It's not a coincidence that what's ended up becoming popular are data-only formats like JSON and service-oriented RPC mechanisms like gRPC or even REST - these don't conflict with native language structures in the same way. As I said, many of the reasons CORBA failed are the reasons that gRPC is more successful - the most critical one being that's CORBA's notion of "object" was the wrong level of abstraction for language-independent distributed computing.

Re:Accidental complexity, essential complexity, and Kubernetes by rocmcd on Monday September 05, 2022 @06:14PM (#32730140)
The executable piece is nice, but not the whole picture. Configuration and, more importantly, isolation of the runtime, are also huge benefits that come with containers.
Re:Accidental complexity, essential complexity, and Kubernetes by goodpoint on Tuesday September 06, 2022 @05:56AM (#32734992)
Static linking is even worse. Now you traded a blob containing gigabytes of software making it difficult to audit and maintain with a smaller and more opaque binary blob.

Research shows that containers on docker hub, flatpaks etc are full of unmaintained libraries with vulnerabilities in them.

So no, we need to go back to proper dependency management and shared libraries.

Re:Accidental complexity, essential complexity, and Kubernetes by theteapot on Monday September 05, 2022 @06:05PM (#32730059)
Sounds pretty much like containers are the solution to containers.
Re:Accidental complexity, essential complexity, and Kubernetes by nine_k on Monday September 05, 2022 @09:50PM (#32731726)
The best formulation I saw is "containers are a solution to the Rube Goldberg Machine development pattern".

Since dependency resolution problems are hard for many popular languages (Node, Python, Ruby), you are not going to enjoy sharing the installed packages between two apps. Same with shared libraries for compiled languages.

Otherwise something like Nix + cgroups-based runner had a chance to suffice.

Re:Accidental complexity, essential complexity, and Kubernetes by threeseed on Monday September 05, 2022 @05:36PM (#32729778)
That is only a real solution if everything is running on the same operating system in the same environment.

What is the point of Kubernetes at all in your situation.

Re:Accidental complexity, essential complexity, and Kubernetes by candiddevmike on Monday September 05, 2022 @05:47PM (#32729877)
Everything already is running on the same operating system with Kubernetes where it matters (kernel, runc/crun, etc). Containers are a band aid to wrap an app with additional files/libraries/whatever. In Go for instance, I can include all this stuff at compile time (even conditionally!).

I'd love to see Kubernetes be able to schedule executables directly without using containers by way of systemd nspawn or similar. You could have the "container feel" without the complexity of the tool chain required to build/deploy/run/validate containers.

Re:Accidental complexity, essential complexity, and Kubernetes by samus on Tuesday September 06, 2022 @02:08AM (#32733510)
The tool chain to build/deploy/run/validate is the whole point to containers. It's something that unifies the deployment model of applications, unless you want to commit to a single programming language ecosystem. And not every ecosystem has tools to create a monolithic deployment artifact.

Even if you have monolithic deployment artifacts: by the time you have solved all the use cases that the image distribution workflow cover, you have basically reverse-engineered it. If you have already done that, kudos to you, you indeed don't need that workflow. And you probably will find it very easy to containerise those artifacts should you ever need to.