From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael A. Olson" To: elix@sourceware.cygnus.com Subject: EL/IX API levels, services Date: Wed, 12 Jan 2000 16:21:00 -0000 Message-id: <200001130020.QAA39244@triplerock.olsons.net> X-SW-Source: 2000-q1/msg00000.html Hi folks, As everyone emerges from their Y2K bunkers to survey the wreckage, I thought I would reopen the API discussion. My point of view is that of a database software vendor (Sleepycat distributes Berkeley DB) who would like to port once, to EL/IX, and not have to do ports for every embedded OS vendor. The EL/IX spec characterizes the four levels of interfaces as: Level 1: RTOS compatible layer. Level 2: Linux single process only. Level 3: Linux multiprocess for embedded applications. Level 4: Full POSIX or Linux compliance. When I think about deploying Berkeley DB on an embedded OS, I characterize levels of service in an analogous way. These are basically the levels of service that applications that embed Berkeley DB are looking for: Single-user, no transactions: Basically a dbm-alike. Single-user with transactions: Multiple changes can be grouped into single operations, system and app crashes don't lose data. Multi-user, no transactions: Multi-thread, maybe multi- process. Dbm, except that multiple threads can read and write the database concurrently without trouble. Multi-user with transactions: Combine the last two. Under the current draft, level 1 of the EL/IX spec is all we need to deliver threaded, transaction-protected database management. If the application wants to use multiple processes, rather than multiple threads, to operate on a single database, then we jump to level 4. The only thing missing from level 3 of the spec that makes it impossible to do multi-process database services is shared memory. The shm_ interfaces show up in EL/IX level four. Why is that? It seems to me that the level 3 goal (Linux multi-process) would be furthered by the availability of named shared memory. The high-end embedded vendors, like Wind River and QNX, have good named shared memory abstractions already. I don't know about the embedded Linux vendors. Also, I'm a little curious about the interface names. Berkeley DB uses shmat()/shmdt()/shmget() now. The EL/IX spec calls for shm_open() and shm_unlink(). I can imagine how those map to the calls we use now, but I am not familiar with them. My vote would be to move the named shared memory interfaces into level 3, because my code would run on more devices that way. I don't know how hard the implementation would be for the OS vendors, though. The good news is that the draft spec would permit us to port to EL/IX quite easily. We've got customers on embedded OSes who would be quite happy with the services we could offer at level 2 of the current draft. Cheers, mike