On 11/20/14 03:57, Atgeirr Rasmussen wrote:

Hi everyone!

First, on the original topic of this thread: I think the new repo is fine, it may be a useful alternative to consider placing such things in a utilities/ directory on opm-core instead to reduce the number of repositories though.

Second, about gentoo, development platforms etc.: all developers have their preferences, and we basically have scratched our own backs when it comes to platform/distro support.

Yes, I agree. Each Developer should have their own fiefdom (repo, branch
whatever).




I make sure it works for me (Mac OS X), others make sure it works on SUSE, Ubuntu, RHEL etc. There is as far as I can tell only one compromise made (in the sense of restricting the developers) for compatibility, and that is that we should support gcc 4.4 (which means that certain C++11 features are not to be used for example). I see that gentoo is making some people very enthusiastic, and may try it in the future, but platform support will come from people who actually use it of course. When it comes to compilers, I use a recent clang, so do some others. I know people are using gcc versions from 4.4 to 4.9. So I think our platform support is broad enough from a developer's point of view.

This is also an good statement. What general architectural documents provide, for one thing, is the scope and usage of the standard languages that are acceptable to the project's core; as you have partially illuminated above. This is a great start to part of the general documents, that are needed. When you want to use another language, say R, you just put your work into a separate module and
document the compile time and runtime  issues that must be satisfied.
Modular design now and there are no restrictions for new modules and codes.




Third, about user friendliness and support: this year, work on such things (in particular creating a new proper release) has taken a back seat to completing the work on the fully implicit black-oil simulator (opm-autodiff's sim_fibo_ad as it is currently named). This is quite unfortunate, but it is both a question of resources and priorities, and also about not advertising a release until the new things in it are complete. The second point is probably a bit controversial: it is against the 'release early, release often' mantra that is often considered desirable. It is a bit psychologically motivated, I think: if I feel that the complete version is just around the corner, I'd like to wait just a little bit before releasing. Of course that may turn into a problem when things take longer than expected, as they often do (and did in this case as well).


Wow, I think you completely missed my point. Your points made above
are very valid, in a Microsoft or Apple world. They miss the point
of open source development, completely, imho.

Users are not second grade kids, but mostly over-educated professionals
who if they choose to, can code, modify codes, and ask deeply troubling questions to the developers. These sort of (technical) users, are the reason software becomes robust. What you have articulated so far, does not encourage others to "join in" and become serious users or contributors, both fundamental reasons for open source projects.




Part of the user-facing complexity is the existence of several modules and their non-trivial dependence relations. Also the fact that different modules may require different third-party libraries, some of which may be optional.

The dependencies should be robustly handled with compile time flags and run time flags. These can all be brought out into the CLI or passed on as settable flags (passed parameters) to other codes. What I'm proposing here is the robust usage of flag settings, so an array of current choices and a myriad of future choices, are standardized in how they are optioned, selected and the resulting codes compiled. Let's get one thing straight. I'm not promoting Gentoo here. I have used dozens of operating system and languages over the decades and as such am agnostic to those decisions. In fact, for an open source project to become robust, it should be readily compilable on a variety of platforms. That said, Gentoo has solved this quandary that complex software development creates and gives users a choice of package managers (portage and Paludis). In fact there is nothing preventing yet another package manager.

What Gentoo does if force the tough decisions to be solved, before rolling out a binary mess. Cleaning up the "mess" periodically and calling it a "release" is a very weak method of for modern management
of codes. What most robust (rolling if you like) linux distros offer now
is stable and testing releases that are timed by the individual developer. They are available along side the established (stable) versions that have been previously released. The user merely selects
at compile time which stable or testing version of a module to include.





There will always be a tension between wanting everything to be in one big module for simplicity and wanting each piece to be as independent from others as possible.

Boy, I do not know where to begin with this statement. If you write, debug, test and make the patches available, folks will frequently
update (sync), test and verify the code is good, particularly the devs
of other modules. There is no every 6 months or so (nightmare) to clean up. Furthermore, astute develops will keep their code clean and discernible, so technically astute users will offer up patches to that dev, because they are a *team*.

Rolling a bunch of small problems into one giant mess has never simplified resolution; the incited finger pointing just gets worse. That is does not simplify anything, it adds overt, unnecessary complexity. It obscures bad decisions that much later need to be reversed. It complicates accountability for codes that are fundamentally flawed. Beside different coding styles have to coalesce; so without pulling a code review of the current codes, I'd be willing to bet there are no current coding standards for this project. In fact I'd be surprised if any of the repos, where 3 or more folks are currently contributing has an established and published coding standard?
Toss as much a possible into a single core module ? Very bad idea.




 My current views are:
- There are currently too many modules, and it is bad that opm-core is not the root of the tree. Suggestion: combine opm-parser and opm-core into opm-core.


I'm not going to challenge this. I'm going to blindly trust that the
devs that have written most of the "core codes", whatever that is,
should agree on how to organize the code. However there are a few
fundamentals to keep in mind:

(A) The core (base) code should compile and install on many different platforms as reasonable possible. 2 or 3 is not sufficient to be robust.

(B) The core code should be designed with the express intention of creating an environment where many different modules can interact with the core code. Multiple API, methods for data movement and interaction
with other softwares are keen design goals of all open source softwares.

(C) Everything that can be extracted into another separate module, should be developed that way. Grids and solvers are but two of a myriad of codes that need to have a straightforward method to allow for competing modules. Surely advance languages, with unique capabilities, such as but not limited to R, Scala, and Haskell will bring forth robust (read more and faster modules with many more features in new modules that will make OPM very, very attractive to a much wider audience. So do not force things into the core for the sake of making it a massive singular kludge. Modular software design methodologies abound, for good reason; read about them (if necessary)
and keep the core clean, minimize and robustly well documented.

(D) A, B and C are not a comprehensive list, merely a starting point for the OPM architects and USER communities to discuss and formalize.


- We do not want everything in one module, we should have a fairly low threshold for adding a new module with new functionality.

YES!



But we should allow the core (or a few modules close to it) to grow to include such things as they mature.

Why? To make debugging a nightmare? To encourage crusted up, old codes to not be re-worked? If you go and look and study any of the really big, important projects, that have survive more than a decade, you'll find most all of that original code has been replaced, often many times. It's very difficult to write robust code the first few renditions, as everyone knows. You create a mega-monolith, the code becomes too expensive to maintain or innovate with and the project dies, or requires a world class expertto debug.

Just read up on "heartbleed"/openssh [2] or ffmpeg for some illuminations.




- Adding third party dependencies (such as Eigen) to the core is acceptable if it is easy to satisfy this prerequisite on the most important platforms (Ubuntu and RHEL in my mind), easy meaning 'can be done with a maximum of 2 commands'.

Properly written codes (modules) should compile stand alone. Maybe a small amount of wrapper code is needed to it can be used, stand alone. Confusing OS syntax with code quality is what you are doing here. A module needs to compile with no errors (hopefully warning are a result
of options not set and other trivia). And be usefule by itself.




So it should be no more complicated than adding a PPA and apt-get. And it should not be hard (requiring manual tweaking) on any of the platforms we support or work on

Here we go again. Designing open source software, crippled from the beginning with the semantics (short comings) of a particular distro is a certain recipe for failure (code too difficult to maintaining, troubleshoot or extend). Many folks use gentoo ebuilds as a guide to port codes to other OSes. It's a well establish practice. There is nothing obscure about it, other than a well documented set of tools that enhance standard linux shell commands. It reads like a manual of how to compile a given code, including the compile time and run time dependencies. Gentoo will facilitate porting codes to MacOS, windows,
BSD and a plethora of chip architectures, by the very nature of working
on Gentoo.





(I'd like to get rid of SuperLU usage for this reason). A new code having a new third-party dependency is often a good reason for putting it in its own module. - Using branches instead of repos seems very alien to me, I do not think it brings much benefit, but it does require more attention and care from users and developers. If I want to use code together that resides in two different branches, I do not see a simple way to do this, other than having multiple working copies of the repositorym each checked out to a different branch.

OK, let me try to articulate this with some greater granularity.
Branches, repos, various codng (style) semantics, languages, data IO,
etc etc, do not matter. Let each of the Devs have their fiefdom, as they
deserve that level of respect and support. However that said, these individual devs become burdened, as they should be, with the responsibility to ensure that their work compiles into and work with
the (base) core codes as well as those other established modules.

What does matter is that the "core" is defined as above, with more design constraints that effect openness and interoperability with as wide a variety of codes as possible. The more modules, the more keenly the base (core) codes become, tested, debugged, extended, maintained and extended to support *ALL* of the companion modules.

Bring code in is as simple as compile time and run time options, that the user selects when they build OPM. The mechanism is compile time and
and run time flags. Gentoo solves this by supporting multiple "stable"
versions of codes. We use a mechanism referred to as "slots" to distinguish the various stable versions of codes. And a given stable version of a code may or may not support the same list of flag setting. The ebuild for that stable version of a code lists those constraints of the other module versions it can inter-operate with. The user simple selects the flags they want. There are commands and places to read what
each flag does on each code





- As everyone else, I agree that the current situation with the build-system being duplicated everywhere is not good. I do not think we have reached a consensus about how to replace it though. I'd like for all of it to be in opm-core only, and other modules only having a way to find opm-core, and adding their own file lists etc.

Huh?  New folks should be able to download code, run make, and execute
binaries on a wide variety of platforms. Not having design document that insist on this "openness" is the exact reason we have a kludge now. We cannot even publish a stable version beccause of this sort of pathetic posturing. You write code, it should be compilable every few days, or a week at the most. If is usable, folks on at least (6) other platforms should be able to download, compile and test, particular other devs and technical users. If that is not your semantic, your semantic is fundamentally flawed, imho.

The reason we are all waisting time on this now, it because the project was not robustly organized with conceptualization constructs and criteria that prevent this sort of aloofness. If we fix this once, now, then we'll save an incredible amount of(wo)man-years in efforts down the line. Gentoo is not a distro for the average computer user. It is a distro where everything, including compilers are built 100% from the ground up. Gentoo fleshes out many problems before the consumer uses the binaries, so as to make the developers look like extremely accomplished developers. Technical users are a fundamental component if for no other reason than to robustly provide a diverse testing environment. It forces openness, inter- interoperability and provides a well established path for technical users to become developers. Gentoo is ported and encourages porting to an enormously wide variety of hardware platforms; this substantiates it's semantics for code development, compiling and maintenance and yes forking.

If you look at the wide variety of competing hardware that users should be able to run OPM on in the future (arm, SIMD, MIMD, HPC, clusters, clouds, x86 and derivatives just to mention a few), you also solve the future portability problems by properly implementing a robust, open, well defined, modular coding semantic now.

Otherwise OPM become a useless kludge that will be so miserable to maintain, that it will be prematurely abandoned, because no new developers will be attracted to this project. It's a boys club now,
let us make it an open source project, we can all be very proud of?

There are other ways to solve these problems, but their solution has already been achieved by Gentoo. Folks that develop on gentoo have their work readily ported to any other OS out there. Most of what is developed elsewhere is a major pain to port to different OS. Truth be know, I know lots of folks that develop codes on gentoo and then purposely port to target hardware, like embedded systems, SOC, FPGA, Asic and wider variety of commonly know Operating Systems; gentoo is a well kept secret among technical users and developers.

Gentoo has a livedvd folks can play with  now [2]. Critiques
about gentoo [3] abound and are correct concerning novices. For developers, a traditional gentoo install takes a few hours, with moderate, periodic intervention. Afterwards, it is always upgradeable and is fantastic for installing the latest codes from a variety of sources, developing software, and having access to an incredible cadre of experts, many of whom will debug and write code snippets for you, on the fly. Gentoo does become "an addiction" for technical users, because there is no other distro that is as powerful, and puts the *USER* in the driver's seat. YMMV.

And I'll have a usb image so folks can run gentoo, install and compile codes for saving. That way, you can keep gentoo on a usbstick, on your keyring! Do wish me luck?

If the codes and the project are properly structured, via  proper desing
that is well thought out and inclusive of diverse platforms, gentoo
is but one of many. If you find yourself struggling for that "nirvana"
then I invite you take gentoo for a test-drive.




Atgeirr Flø Rasmussen

peace,
James

[1] http://www.theepochtimes.com/news/5-7-5/30084.html

[2] https://www.gentoo.org/news/20140826-livedvd.xml

[3] http://www.linuxinsider.com/story/81207.html

_______________________________________________
Opm mailing list
Opm@opm-project.org
http://www.opm-project.org/mailman/listinfo/opm

Reply via email to