> Removing all the problems you can find is simply not a reliable way to
> develop software. You have to design the software such that there aren't
> problems, then remove any that slipped through. You can't use testing as
the
> way to create the guarantee in the first place.

Heh :-)

I totally agree with that!!

-paul

On Jan 22, 2008 8:47 PM, David Schwartz <[EMAIL PROTECTED]> wrote:

>
> > Guaranteed to work?  Who's doing the indemnification?
>
> The point of a guarantee is that it is much less likely to change on
> another
> machine or if a library is upgraded and compatability is claimed. Of
> course,
> things can still go wrong.
>
> When bugs are fixed in a library or a new version claims compatability
> with
> an old version, every effort it made to ensure that whatever guarantees
> were
> provided with the old version are still met by the new version. If you
> stick
> to those guarantees, and they are sufficient that you don't need
> additional
> assumptions, you are much less likely to run into a problem if the library
> is upgraded or otherwise different from the one you tested with.
>
> > Security's all about trade-offs.  If you can make some simplifying
> > assumptions that cut out large parts of code you might well be better
> off.
>
> The risk that a dynamic library on another machine will break his
> assumptions is greater than any benefit from eliminating code. This is
> especially true in this case, where it's hard to imagine any risk created
> by
> adding locks (other than deadlock, which would seem to be very unlikely to
> pose a security risk).
>
> Removing all the problems you can find is simply not a reliable way to
> develop software. You have to design the software such that there aren't
> problems, then remove any that slipped through. You can't use testing as
> the
> way to create the guarantee in the first place.
>
> The design has to be bug-resistant in the first place.
>
> To use an engineering analogy, imagine if you design a bridge. You fail to
> specify what type of steel to use, but when you test, you pick a very
> high-quality steel. Did you validate the bridge design?
>
> The answer is no, because you tested with only one steel, and the design
> isn't limited to that one steel.
>
> On the flip side, if you design to the guarantees the steel manufacturer
> provides, specify steel that meets those guarantees, and test with that
> steel, then you have a validated design.
>
> Responding to Paul:
>
> > Since OpenSSL can be compiled as a non-locking,
> > single-threaded library, I'm trying to answer the question:
> > If I have one context per thread, will these contexts trash
> > each others data when OpenSSL is compiled with no locking.
> > The first 4 points of my list are the trashings that could take place.
>
> > Now I just need the complete list :-)
>
> You missed step 1. As far as I know, *no* platform provides that code
> compiled single-threaded is thread-safe in fundamental ways. For example,
> AFAIK, there is no guarantee that 'malloc' won't be "optimized" in a
> single-threaded compile in ways that break horribly on multi-threaded
> code.
>
> You need the completel list for your *platform* and an assurance that no
> new
> entries will be added to that list on any platform your code will compile
> on
> or run on.
>
> Absent such a guarantee, your attempt is a disaster waiting to happen even
> if it works in the first place.
>
> DS
>
>
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> Development Mailing List                       openssl-dev@openssl.org
> Automated List Manager                           [EMAIL PROTECTED]
>

Reply via email to