Narayan Desai wrote:
"Luke" == Luke Kanies <[EMAIL PROTECTED]> writes:

  Luke> The problem is that there appears to be a split whether we
  Luke> want it or not.  The last few workshops have been very
  Luke> frustrating for me, because they haven't really even tried to
  Luke> address how a sysadmin would take advantage of what we talked
  Luke> about.  Tools are cool and great, but how do they make
  Luke> people's lives better?

  Luke> I'm in the midst of building a large framework (hell, it's >
  Luke> 50k lines with test code) and a community around that
  Luke> framework.  How can the workshop help me make a better tool?
  Luke> How can the workshop help my users more effectively use
  Luke> Puppet?  How can the workshop help potential users choose
  Luke> between the different tools?

Perhaps I was wrong, maybe there are three classes of attendees:
researchers, tool developers, and users. I am not sure if I actually
believe this is a good split. I agree strongly with Paul; being
current in the research is critical for anyone who is going to write
tools today that won't be discarded before tomorrow.

I would always expect the tool developers to be responsible for merging the research and practice; I don't think we'd get much benefit from just having tool developers talk to each other about their tools.

I'm not trying to be down on research, but I often feel like Config-mgmt research is in the string theory realm where we can talk for years but don't carry out any experiments. Good research is founded in good data, and there's precious little data in the config-mgmt world. And for the record, I'm not the only one who feels this way -- after every workshop, I have a few people come up and complain that they sat through the same workshop the year before.

I've got what I think is a good way to get data, or something like it, and I'm full-up on research until I make a bit of progress. I have a theory, I'm testing it, and I'm trying to make a living at the same time (the fact that I'm trying to survive by developing Puppet surely has an impact on how I see all of this).

If I come across research that affects my ability to test my theory, I want to integrate it; if I come across data that either supports or disproves my theory, then I clearly need to know about it; but there are many areas of research that are effectively orthogonal to my experiment, and I just can't be interested in staying up on all of those, just like my wife (who's a cancer researcher) has only a passing interest in areas other that cell-cycle research.

  Luke> And when I say "better tool", I mean today, this week, next
  Luke> month -- not some day, not three years from now.  As a
  Luke> developer, I'm looking for great features to add, like bcfg2's
  Luke> reporting or LCFG's spanning maps, and how those features will
  Luke> affect my users.

I guess that I come down in the middle on this one as well; those
features aren't just features; they are research and theory put into
practice.

Clearly some features are just features, and some features are theory-backed. If they don't become features at some point, though, I don't have a lot of use for them, so I'm more interested in the features than the theory, at least as it pertains to my day-to-day job right now.

  Luke> I've tried to talk about the theory behind Puppet, and it gets
  Luke> a very poor reception, if not sometimes outright hostile.  I
  Luke> am pretty set in how Puppet works, and I'm in the
  Luke> put-up-or-shut-up phase.  No one seems particularly interested
  Luke> in the fact that I'm trying to create an operating system
  Luke> abstraction layer, so the best I can do is create what I think
  Luke> is a good tool and see if others are interested in using it.
  Luke> I think it's theoretical suicide for any automation tool *not*
  Luke> to either create or use an operating system abstraction layer,
  Luke> but I'm apparently the only one who thinks that.

I have two points here. I think that you are conflating theory and
design here. For example, (a little closer to home), I could say that
an aspect of the design used by bcfg2 is similar to the formalization
of closures theory work that Alva has done. I think they are two
different things, and this is important distinction.

I could certainly be conflating the two; if that's the case then I probably have no theory and only a design, which seems somewhat unlikely but would be tolerable to me. At the least, I expect Puppet to be fertile ground for research if someone were so inclined, because it would be a clean line between the interesting stuff above (compiling configurations, for instance) and the boring crap below (what's the order of arguments to crontab on linux vs. Solaris?), and I certainly hope that other people can take advantage of Puppet agents and its library to avoid reinventing the wheel.

On the second point, I just don't think anyone is all that interested
in the OS abstraction layer; everyone deals with this issue somehow;
Paul uses sxprof constructs and plugins in LCFG, we use our group
structure and client code to do this in Bcfg2, etc.

I have not yet seen anything that I would consider to be an operating system abstraction layer in any other tool. LCFG has very high-level, opaque plugins that manage entire semantic chunks of work -- if you want to convert from the sendmail plugin to the postfix plugin, well, good luck.

I don't know enough about Bcfg2 to know how well it could function as an abstraction layer; at the least, all of the modeling is on the server and not accessible in a library or on the agent (which I know was a design goal of yours, whereas I wanted the exact opposite), which means that it is not an abstraction layer that other tools could take advantage of. However, from what I can tell, Bcfg2 knows a lot about file formats, which are generally non-portable -- heck, even the use of files is non-portable, as trying to create a host on an OS X box will show.

Right now, any ruby script could do any of the work Puppet does -- instrospect system state, install packages, start or stop services, create hosts, mount file systems, etc. -- portably and easily. You can use Puppet to copy objects from one machine to another, across platforms -- you could copy a user from a Linux box to a Solaris box, for instance.

My theory is that system administration, operating systems, and computing in general are all being held back by how unnecessarily difficult it is to manage heterogeneity, and to a lesser extent by how much legacy code there is around because of how difficult it is to migrate off it. My corollary theory is that building an abstraction layer capable of hiding 95% of the implementation details of operating systems and applications will allow system administration to improve dramatically, to the point where it will far more closely resemble programming than today's idea of administration. I believe these are both theories, and I have created a design that I am trying to implement in order to test them.

Yes, Puppet also includes a simple language that you can use for compiling configurations for your hosts, but the language is mostly there because the library is useless without a tool that uses it. You could think of the language as a separate tool, really, and in truth they are almost entirely decoupled -- you could easily replace the language with another configuration compiler, and in fact I've toyed with creating a simple domain-specific language in ruby (that is, you'd write valid ruby code that would compile down to client configurations, rather than the custom Puppet language).

Again, I agree no one cares about the abstraction layer, but I am flabbergasted that this is the case. I assume no one cared about portable languages when C and libC were developed either; I know I don't have the smarts of Kernighan et al, but I'll keep pushing until I fail or someone smarter takes over, I guess.

  Luke> I'm sure there are critical theoretical flaws in Puppet, but
  Luke> they don't seem to be affecting me or my users.  What is
  Luke> affecting us is that I'm still doing 98% of the development
  Luke> and I have a relatively small user base.  What I want to know
  Luke> as a tool developer is how to fix that, and as an
  Luke> experimentalist I need the same answers so that the experiment
  Luke> can be carried out with a more complete framework and a wider
  Luke> set of test subjects.

This is only one aspect of being in line with current theory. I made a
big design mistake in bcfg, theory predicted it early, but I ignored
it until it became a big problem. When it happened, it became a fire
to put out. I learned my lesson there.

What was the design mistake? Did you know it was a mistake when you made it? Did you make it because you didn't know about the theory, or because you thought the theory was wrong?

I have done my very best to keep up on current theory and to apply it whereever I can (although I have admittedly fallen behind recently, since I've been so busy implementing), and Puppet's language was designed with current theory as much as possible (e.g., I've somewhat implemented what I see as Alva's closures within Puppet's language, to great success).

I haven't seen much new theory recently that I can directly apply to Puppet, though; either it's really great validation work that could be plugged into Puppet's language if only I had the time and the ability, or it's based on operating below the abstraction layer, which I take as an axiomatic line for config-mgmt tools.

People at the config-mgmt workshop have told me that Puppet has flaws that contradict current theory, but the majority of this criticism has been dirisive to the point of being rude and was also made without much actual knowledge of Puppet, so I have chosen to ignore most of it.

Incidentally, a customer just paid me to fix a significant problem in Puppet's parser; the problem existed because I couldn't figure out how to fully implement an aspect of closures, so rather than allow looseness I left functionality out. The customer wanted that functionality finished, so I was able to significantly enhance the language while remaining consistent with theory.

The other thing I am trying to keep in mind is building bcfg2 in such
a way that i can plug in advanced infrastructure as it becomes
available. This isn't easy much of the time, but I think that it is
goal in the long term.

That is definitely my goal; you should be able to replace any part of Puppet that you don't like (the client/server stuff, the language, or the library) with minimal rewriting, and it should be very easy to create new layers between existing layers. It should also be easy, in general, to expand the core -- Puppet will automatically load all kinds of code that you drop into your ruby search path, like language functions, resource types (files, packages, filesystems, etc.), resource providers (e.g., "package" currently has 16 different providers, like apt, yum, blastwave), and quite a bit more.

It should take very little effort to hook a validation engine up to Puppet's compiler, and I'd love to be able to do so; but I'm not likely to actually write the engine unless a customer pays me for it, because I just don't have time.

  Luke> The config-mgmt BoF has averaged more than 70 people every
  Luke> year since I've been running it; you just can't get the same
  Luke> intimate discussion in that kind of environment.  And having
  Luke> the full 8 hours is very useful.

I agree. I think that the topical area for the practice workshop will
be dramatically different from the current config workshop. I would
only expect it to siphon off people that are not interested in the
research topics. I expect many people to attend both.

I expect the same thing; it's not so much a membership change I was looking for as it was a focus change.

--
It has recently been discovered that research causes cancer in
labratory rats.
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com

_______________________________________________
lssconf-discuss mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/lssconf-discuss

Reply via email to