On Fri, Feb 10, 2023 at 9:57 AM Andy Lutomirski <luto@xxxxxxxxxx> wrote: > > I am saying exactly what I meant. Obviously mutable data exists. I'm > saying that *putting it in a pipe* *while it's still mutable* is not > good. Which implies that I don't think splice() is good. No offense. No offense at all. As mentioned, I have grown to detest splice over the years. That said, in defense of splice(), it really does solve a lot of conceptual problems. And I still think that conceptually it's absolutely lovely in *theory*. And part of it is very much the fact that pipes are useful and have the infrastructure for other things. So you can mix regular read/write calls with splice, and it actually makes sense. One of the design goals was for things like static http, where you don't really send out just file contents, there's a whole header to it as well. So it's not just a specialized "send file contents to network", it's a "you can do a write() call to start filling the pipe buffer with the http header, then a splice() to start filling the file data". And it was also designed to allow other sources, notably things like video capture cards etc. And very much multiple destinations (again, media accelerators). So it all "makes sense" conceptually as a generic pipe (sic) between different sources and sinks. And again, using a pipe as the mechanism then also makes perfect sense in a historical Unix context of "everything is a pipe". But. The above just tries to make sense of the design, and excuses for it. I want to re-iterate that I think it's all lovely and coherent conceptually. But in practice, it's just a huge pain. The same way "everything is a pipeline of processes" is very much historical Unix and very useful for shell scripting, but isn't actually then normally very useful for larger problems, splice() really never lived up to that conceptual issue, and it's just really really nasty in practice. But we're stuck with it. I'm not convinced your suggestion of extending io_uring with new primitives is any better in practice, though. Linus