8 ms·
Why not have Lego like Software?
Hi Folks,
Really enjoy the HN great community with so much knowledge and enthusiasm, been lurking for a long time just reading the stuff you folks share and discuss, i could go on and on :) but need to keep it short...
Consider I am simply asking a question and no implying anything, rather just wondering...
Would it be possible or rather better if we built software in a Lego like way, Particularly i was wondering about Linux and some other tools (audio players, etc, etc)
I understand that all the distros do things in their own way, but at the same time share a common Core (correct me if i am wrong) Kernel, then different groups build things around it.
Why not unify those groups and make them work on the Shared Components and Individual - ill try to explain...
Imagine Having a Single distro which once you install the Core on your Computer asks you Which group you belong?
-Musician
-Scientist
-Education
-Artist
- Developer
etc.
Based on that it installs the UI + Tools for that domain, Where also if needed be Switching from a Domain to Another Domain just removes all the packages and then asks again what you wish to add
Just like Plugins for IDEs
Wouldnt it make the Software more Robust and also everyone gets to work and build his own vision + make the shared core much more reliable, I have been thinking about this and wondering about it, also been reading and searching but havent found the answer i was looking for really, I might have also skipped a few details on what i was going for, but i guess you who are versed in this topic would Elaborate more on it and give your comments.
Looking forward to the answers :) (if the title is wrong suggest a change, be glad to update to attract more thoughts and discussion, Reading suggestions welcome, Books, podcasts anything...)
Thanks
- Mad_Fury 8y agoMissing from top: These Days there is a new project for an already existing project on the same topic which is in a Way fragmenting the Market more and more - Yes Different features etc etc. but why not work on a common problem - Extend the functionality and allow the user to chose the things he needs - You buy a lego set and you can mix and match with a set from 10 years ago Is it because everyone wants to lead a project, opinions differ on the solution approach or something else
- exikyut 8y agoYou nailed it with the last line: people. Everyone wants to rule the world. This fundamentally doesn't work, but that fact doesn't stop everyone from irrationally trying anyway. The problem you are getting at is entirely sociopolitical, and is, sadly, effectively unsolveable. I spent a decade and a half figuring this out (started circa 2003, gave up roughly last year). It was a good journey. If I was going to pick a starting point to springboard off of, it would be that humans are embarassingly easy to social-engineer. With developers, you just stroke their egos a bit, make them feel validated and secure, and they'll build pretty much whatever you want. Managers have the opportunity to exert power and control over entire teams of people!!1 and this is so fun to play with sometimes the end goal (the enabler of the control, aka the responsibility) nearly (or actually :/) goes out the window. It only takes a little bit of study to reverse-engineer the brain and almost immediately you'll get actionable insights on how to make people feel like they're getting what they really want when you're actually making them achieve your agenda instead. Fill people's heads/lives with movement they have to keep up with, make it so they can ride it like a fun wave if they do it right, and bam, you can control lots of people. Crowd dynamics is so fascinating. I'm not even touching on office politics, cults, etc. Sadly open source has its own toxicities. Linux is in many ways the PHP of operating systems; some really amazing bits hiding away in invisible corners, but no good oversight due to its bazaar-based design, and thus no cohesiveness. You will never get very far trying to push balanced views within Linux; the community has become too much of a reactive-yet-immobilized culture. The Lennart Poettering debacle is one recent example. Moving away from open source specifically, software design itself is also fundamentally broken because it tries to abstract out the people - what put the intelligence into "artificial intelligence"! - as perfect infallible beings that sometimes make mistakes. (For example, why on earth do programming languages describe errors as "exceptions"?!) Programming is full of leaky abstractions that have never been properly followed up on and properly ironed out of the woodwork. What we're currently stuck with is are systems that are intrinsically tied to individuals' mindset and skills, and as a result no two codebases are really the same. So, it's generally really impressive if you can take Random Component A and expect it to work properly with Random Component B. One example I can pull of the top of my head right now: https://github.com/taviso/loadlibrary https://github.com/taviso/loadlibrary Another way to describe this would be to say that "taking anything and making it work with anything else" is Very™ Very® ʎɹǝΛ NP-Hard™©®, if not categorically impossible. (This is what took me 15+ years to accept.) In terms of perfect governance, I definitely take a cyberpunk stance. https://news.ycombinator.com/item?id=17320295 https://news.ycombinator.com/item?id=17320295 https://news.ycombinator.com/item?id=17083221 https://news.ycombinator.com/item?id=17083221 I also just found this and am adding it in: https://news.ycombinator.com/item?id=17322457 https://news.ycombinator.com/item?id=17322457 Related thoughts/continuation: https://news.ycombinator.com/item?id=17299517 https://news.ycombinator.com/item?id=17299517 (if you're truly interested, you might follow all the continuation links) TL;DR study people, bureaucracy and sociopolitical crowd dynamics
- Piskvorrr 8y agoThat's essentially what a package manager does - there are even such groups as you suggest. It does differ from Lego because of the complexity - multiple orders of magnitude, in fact; and another thing: everything made of Lego has a distinctive Lego-style. That's perhaps another driving factor: "that style looks ugly, we will build another, nicer and more fluid."
- Mad_Fury 8y agoBut why not work collaboratively to improve the existing one? I understand the package manager, please if possible share the groups links or anything pointing in the direction, i would like to explore. Thanks
- masswerk 8y agoPossibly, the BSD community is more like what you're looking for. It may be a matter of top-down vs bottom-up philosophy (i.e., control).
- Mad_Fury 8y agoI asked the question because of Distro Watch, i was always wondering why are there so many Linux Distros, why not work on just a few Distros United, while enabling the modularity where each group would have a piece of their vision while enabling the users to chose which one they would use, could this fragmentation be the cause for the lack of Linux presence on the Desktop? Rather than uniting the forces, and building experiences on top of functionality, they each build their own experience their own way in hopes of attracting users... Thanks
- exikyut 8y agoI'd say this is due to - disagreements/factions - wanting the satisfaction and validation of building something yourself - implementational conflict with existing systems Sometimes the validation thing is due to ego, sometimes it's because the journey of building a new system is useful in itself. In the case of the distro I want to create (:P) it's because the (very simple) ideas I have conflict with the way things are commonly done, so I'm going to have to set out on my own. It'll be fun though. Users in my case will be a headache because then it won't be a fun personal project. I just want to solve my own frustrations. And "Linux on the desktop" has been a meme for years. It'll never happen until Linux achieves cohesiveness, aka never, full-stop. (Took Microsoft a while to figure that and build WSL...) NB, I don't see an email or other contact details in your bio. I could let you know when I finally do get around to starting w/ that distro.
- Kaibeezy 8y agoAt root, philosophically (as opposed to practically), are you not describing this: A Pattern Language, Christoper Alexander, 1977, https://en.m.wikipedia.org/wiki/A_Pattern_Language https://en.m.wikipedia.org/wiki/A_Pattern_Language Yes, it’s not as blocky and snap-together as Lego, but I always considered that an artifact of the need for adaptability/evolution, flexibility to allow things to fit into environments of random complexity, and accommodating a wide array of human preferences. “Programming”, like architecture/planning of the physical environment, seems to have turned out to need this degree of granularity, nearly indistinguishable from an organic system.
- Mad_Fury 8y agoThanks, I will take a look at it :), please read the bellow comment.
- Mad_Fury 8y agoSeems like a great read, thanks :), book on the way...
- Kaibeezy 8y agoGood call. I’d put it in a top 100, even top 10, for post-zombie/Trumplightenment civilization rebuild.
- Mad_Fury 8y agoPlease do share any other reads :), thanks
- poulsbohemian 8y agoIt really helps to read both A Pattern Language and The Timeless Way of Building together, so you get a complete picture of Alexander's thoughts.
- Kaibeezy 8y agoOK. It doesn’t really go to your original post, but I often also point people to The Design of Everyday Things, Donald Norman, 1988, https://en.m.wikipedia.org/wiki/The_Design_of_Everyday_Things https://en.m.wikipedia.org/wiki/The_Design_of_Everyday_Thing... Basic insight into the question of: “What makes a good tool?” Maybe for your purposes, the angle is: “When is a simplified tool more useful than a complex one?” Or: “How can I add complexity to a tool while preserving its usefulness?”
- asplake 8y agoReminds me of “Software ICs” and the Brad Cox book “Object-Oriented Programming: An Evolutionary Approach”, 1991 if not before (I’m seeing the 2nd edition). He co-created Objective-C.
- deleted 8y ago[deleted]
- exikyut 8y agoI took another look at your post, and figured a 2nd comment would be best. What would be the value of separating users into isolated groups? What if I want to belong to multiple groups? The simple ideology you've used breaks down. Okay, so you could add extra subgroups, but here's the thing - this sort of thing gets tried all the time, the abstractions inevitably break, the implementer(s) give up (hopefully after not too much time invested). The TL;DR of this mindset is that complexity is sometimes good. Sometimes the right tool for the job is the most complex tool, which exposes all the features and shows you the 9,999 knobs and switches and buttons at once. Lot to take in, but then you can do whatever you want. Trying to shoehorn complexity into Fisher-Price user interfaces results in hamstrung yet bloated systems with more complexity than will ever be used. That's what happened with Electron, incidentally, and why some feel so uncomfortable and have such cognitive dissonance about it, I think.
- Mad_Fury 8y agoI like the part in Photoshop, Where you could say for what you wish to use it and it would rearrange the menus or add and remove certain options which are needed for that Use case, this and some other cases influenced my question, Do you think it is a waste of resources having so many tools which do so many things the same way + a few unique options, I like the ShareX tool (screen recording) which asks me to install the extra feature if i wish to use Screen recording, (goes back to the previous comenter who mentioned it is basically packages) I hope i am making myself clear in the questions and comments :D , not a native eng speaker and also didnt really prepare the question well, it just came to me in a rush as it was stuck in my head for a long time, sorry about that, Sometimes i look at old software and some new one (sublime text) where devs worked hard for our resources where as today, (luckily i have 16 GB) there seems to be a lack for performance or the will to design efficient systems (due to abundance of resources in PCs?) What did you mean isolating users into groups? I wouldnt want that :D, but i mentioned it as a layer on top of Core things, example All users want video and web tech - but then some are more specific - these specifics would be the packages they get bundled on top of core features, and the Collective groups of devs work on those Linux drivers and installing certain software is sometimes a real pain and can vary from distro to distro , if the linux is to succeed shouldnt we collectively fight to avoid this barrier Forgive me folks its my first time doing this i think i jump here and there ;D perhaps even confusing you sometimes... I will update the email Thanks
- darkhorn 8y agohttps://en.wikipedia.org/wiki/Smalltalk https://en.wikipedia.org/wiki/Smalltalk
- Viker 8y agoSound engineers have tried this many times....
- Mad_Fury 8y agoAny Reading you recommend or sources, or just saying Thanks
- crb002 8y agoThis is why category theory interests developers. Composing programs like lego bricks. It is more nuanced that, distros involve a lot of snowflake programs using several build systems using several languages many of which do not compose well together. The ecosystem is gravitating back into a homogeneous LLVM back end reminiscent of COBOL/C/FORTRAN all playing well together. Build systems are still a mess. Cmake and Bazel for now are on top. The next winner will allow for massively distributed builds on AWS Lambda and S3. I'm personally working on a distro for AWS Lambda.
- c22 8y agoLego works the way it does because one company is responsible for producing every single little plastic brick. The Lego company takes great pains to control the precision of their manufacturing process to ensure the bricks click together. If you worked for Lego and you designed a piece that did not connect to any other pieces, they would not produce it. It seems obvious this approach cannot work over the whole world. However, I think if you look at software made only within a single company I feel like you do see this principle in action, frequently. Also, Linux distros themselves are the domain-focused packages you want, all built around the "core" of the Linux kernel. There are various "distro building" projects that approach this configuration problem from varying levels of abstraction, e.g. Damn Small Linux, Ubuntu Builder, or NixOS.
- Mad_Fury 8y agoI agree, its clear from the Corp companies, that is why i cant stop wondering about the focus of developers, why each month we get a new framework, new project that tackle the same or similar project as an already existing project. Why not get together and let the best idea win, too often do i read about philosophies and differences, one such i would mention Debian vs Devuan Full disclosure i am not a Software engineer or architect Thanks
- thecupisblue 8y agoBecause not all solutions work the best for all problems.
- carlhjerpe 8y agoIf you compare a Lego toy with a molded one you'll see that the Lego toy easily breaks apart, isn't as polished and depends many parts. This is all things we don't like in the software world.
- rektide 8y agoShared, assembleable components is a dream shared by good projects such as Node-RED and the Sugar desktop environment. There's a lot of rethinking what an app is that's necessary to get to a more "lego" like system, where things snap together & work together via common, regular interfaces. It requires throwing out a colossal amount of the user-experience work we've done, & finding broad top-down principles & systems that serve and guide & place & route the individual components & their connections, which is "some seriously next level shit". https://nodered.org/ https://nodered.org/ https://wiki.sugarlabs.org/go/Getting_Started https://wiki.sugarlabs.org/go/Getting_Started
- davidjnelson 8y agoThis is a really cool idea. It would be great to have something like this but for react. The barrier there seems to be that everyone would have to adopt a common compenetized css standard.
- __d 8y agoRed Hat (and I imagine Fedora) has a concept a little like this: when installing the system, you can select from a list of "roles", and those roles in turn imply a bunch of individual packages. But, there's not many of them, and from memory, there's really only "Desktop" and "Developer Workstation" as options like the sort you're proposing.
- nineteen999 8y agoRedhat/Fedora groups are broken up a lot more than that. From a RHEL 7.5 box: # yum grouplist Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Available Environment Groups: Minimal Install Infrastructure Server File and Print Server Basic Web Server Virtualization Host Server with GUI Available Groups: Compatibility Libraries Console Internet Tools Development Tools Graphical Administration Tools Legacy UNIX Compatibility Scientific Support Security Tools Smart Card Support System Administration Tools System Management You can install any of these later, eg. yum groupinstall "Development Tools"
- __d 8y agoSo of those, perhaps "Development Tools", "Scientific Support", and perhaps a couple of others reflect the OP's proposal of high-level task-centric modular functionality. But there's no reason that groups couldn't be configured for "Musician's Tools", "Artist's Tools", "Educator's Tools", etc.
- nineteen999 8y agoThe arbitrary groups would need to have a comps.xml file generated. https://fedoraproject.org/wiki/How_to_use_and_edit_comps.xml_for_package_groups https://fedoraproject.org/wiki/How_to_use_and_edit_comps.xml... You can pass these to createrepo with the -g flag to create/update package groups in an YUM/DNF repository.
- miguelrochefort 8y agoThe solution is the semantic web.
- Mad_Fury 8y agoYou went All in On Web :D, what about other Systems and Tools, thanks
- BjoernKW 8y agoDoug McIlroy, the inventor of UNIX pipes is quoted as "Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.". I know it's probably not exactly what you're looking for but "Do one thing and do it well" tools and UNIX pipes to connect such single-purpose tools in my opinion is quite close to a "pluggable building blocks" metaphor. In terms of web applications the REST paradigm and data represented as JSON structures is a similar smallest common denominator. Someone else has already mentioned Christopher Alexander's pattern language approach. Design patterns and Atomic Design are similar concepts for the software development domain.
- mlthoughts2018 8y agoThis is the real value of microservices, in my mind. It allows you to create services that "do one thing and do it well," including deployment considerations like the degree of autoscaling or load balancing required by some components and not others. Totally unrelated, it is also why I think "full stack developer" jobs are just business junk and should be totally avoided. Business people wishing for "full stack" employees are like a giant red flag of a business full of dysfunctional complexity mismanagement, without a clear vision of what needs to be solved. Inside of a software system, if we organized one monolith class or one monolith webservice that was "full stack" in the sense that it had responsibilities cutting across lots of disparate systems or layers of the stack, we would rightly think this is a bad software design, rife with unnecessary complexity from trying to make certain components do too many things. And probably it would be reflected in how hard it is to refactor, extend, or write clean tests for such a system. I argue that popping up one layer outside of the software system and into the realm of the organization of engineers who design and implement it, we should still think the same way. Different employees should be isolated specialists in certain parts of the system, and should not be expected to have cross-cutting "full stack" job duties, which is really just a way for companies to artificially save money on headcount (artificially, because the lack of clean separation of concerns ends up costing them more money in the end). This is not a statement that a given engineer should not learn about broad aspects of system engineering. It's always good to diversify your knowledge, have a better picture of the meaning of the work of other teams, or be able to fill in during an emergency or something. Only a statement that an employee's nominal job duties should not include vague bottomless complexity buckets reflected by "cross functional" or "full stack" responsibilities. This dysfunction is also often described with the "wear many hats" bullshit, where the same person who is expected to design a performant machine learning backend system is also expected to create a responsive single page website and write any CRUD implementation, ecommerce shop logic, auth logic, etc. etc., all while also functioning as a devops engineer and a data pipelines engineer because "wear many hats." It's the same mistake that Single Responsibility Principle is meant to guard against, just at the level of programming teams of people instead of programming components of a software system.