comparison unix-phil.ms @ 30:ec17b3a969c7

various minor rework in ch04
author meillo@marmaro.de
date Wed, 24 Mar 2010 22:07:02 +0100
parents f0511a56416e
children 0caa9760fca8
comparison
equal deleted inserted replaced
29:302daab2e8ee 30:ec17b3a969c7
654 654
655 655
656 .NH 1 656 .NH 1
657 Case study: \s-1MH\s0 657 Case study: \s-1MH\s0
658 .LP 658 .LP
659 The last chapter introduced and explained the Unix Philosophy 659 The previous chapter introduced and explained the Unix Philosophy
660 from a general point of view. 660 from a general point of view.
661 The driving force were the guidelines, references to 661 The driving force were the guidelines; references to
662 existing software were given only sparsely. 662 existing software were given only sparsely.
663 In this and the next chapter, concrete software will be 663 In this and the next chapter, concrete software will be
664 the driving force in the discussion. 664 the driving force in the discussion.
665 .PP 665 .PP
666 This first case study is about the mail user agents (\s-1MUA\s0) 666 This first case study is about the mail user agents (\s-1MUA\s0)
675 675
676 .NH 2 676 .NH 2
677 Historical background 677 Historical background
678 .LP 678 .LP
679 Electronic mail was available in Unix very early. 679 Electronic mail was available in Unix very early.
680 The first \s-1MUA\s0 on Unix was \f(CWmail\fP. 680 The first \s-1MUA\s0 on Unix was \f(CWmail\fP,
681 It was a small program that either prints the own mailbox file 681 which was already present in the First Edition.
682 .[
683 %A Peter H. Salus
684 %T A Quarter Century of UNIX
685 %D 1994
686 %I Addison-Wesley
687 %P 41 f.
688 .]
689 It was a small program that either prints the user's mailbox file
682 or appends text to someone elses mailbox file, 690 or appends text to someone elses mailbox file,
683 depending on the command line arguments. 691 depending on the command line arguments.
684 .[ 692 .[
685 %O http://cm.bell-labs.com/cm/cs/who/dmr/pdfs/man12.pdf 693 %O http://cm.bell-labs.com/cm/cs/who/dmr/pdfs/man12.pdf
686 .] 694 .]
700 \fImailx\fP is the adaptation of Berkeley Mail into System V. 708 \fImailx\fP is the adaptation of Berkeley Mail into System V.
701 .[ 709 .[
702 %A Gunnar Ritter 710 %A Gunnar Ritter
703 %O http://heirloom.sourceforge.net/mailx_history.html 711 %O http://heirloom.sourceforge.net/mailx_history.html
704 .] 712 .]
705 Elm, pine, mutt, and today a whole bunch of graphical \s-1MUA\s0s 713 Elm, pine, mutt, and a whole bunch of graphical \s-1MUA\s0s
706 followed Mail's direction. 714 followed Mail's direction.
707 They are large, monolithic programs which include all emailing functions. 715 They are large, monolithic programs which include all emailing functions.
708 .PP 716 .PP
709 A different way was taken by the people of \s-1RAND\s0 Corporation. 717 A different way was taken by the people of \s-1RAND\s0 Corporation.
710 In the beginning, they also had used a monolitic mail system, 718 In the beginning, they also had used a monolitic mail system,
711 called \s-1MS\s0 simply for ``mail system''. 719 called \s-1MS\s0 (for ``mail system'').
712 But in 1977, Stockton Gaines and Norman Shapiro 720 But in 1977, Stockton Gaines and Norman Shapiro
713 came up with a proposal of a new email system concept \(en 721 came up with a proposal of a new email system concept \(en
714 one that honors the Unix Philosophy. 722 one that honors the Unix Philosophy.
715 The concept was implemented by Bruce Borden in 1978 and 1979. 723 The concept was implemented by Bruce Borden in 1978 and 1979.
716 This was the birth of \s-1MH\s0 \(en the ``mail handler''. 724 This was the birth of \s-1MH\s0 \(en the ``mail handler''.
742 750
743 .NH 2 751 .NH 2
744 Contrasts to monolithic mail systems 752 Contrasts to monolithic mail systems
745 .LP 753 .LP
746 All \s-1MUA\s0s are monolithic, except \s-1MH\s0. 754 All \s-1MUA\s0s are monolithic, except \s-1MH\s0.
747 This might not be true, 755 Although there might acutally exist further, very little known,
748 but it reflects the situation pretty well. 756 toolchest \s-1MUA\s0s, this statement reflects the situation pretty well.
749 .PP 757 .PP
750 While monolithic \s-1MUA\s0s gather all function in one program, 758 Monolithic \s-1MUA\s0s gather all their functions in one program.
751 \s-1MH\s0 is a toolchest of many small tools \(en one for each job. 759 In contrast, \s-1MH\s0 is a toolchest of many small tools \(en one for each job.
752 Following is a list of important programs of \s-1MH\s0's toolchest 760 Following is a list of important programs of \s-1MH\s0's toolchest
753 and their function: 761 and their function.
762 It gives a feeling of how the toolchest looks like.
754 .IP \(bu 763 .IP \(bu
755 .CW inc : 764 .CW inc :
756 incorporate new mail 765 incorporate new mail (this is how mail enters the system)
757 .IP \(bu 766 .IP \(bu
758 .CW scan : 767 .CW scan :
759 list messages in folder 768 list messages in folder
760 .IP \(bu 769 .IP \(bu
761 .CW show : 770 .CW show :
781 .IP \(bu 790 .IP \(bu
782 .CW forw : 791 .CW forw :
783 forward a message 792 forward a message
784 .IP \(bu 793 .IP \(bu
785 .CW send : 794 .CW send :
786 send a prepared message 795 send a prepared message (this is how mail leaves the system)
787 .LP 796 .LP
788 \s-1MH\s0 has no special user interface like monolithic \s-1MUA\s0s have. 797 \s-1MH\s0 has no special user interface like monolithic \s-1MUA\s0s have.
789 The user does not leave the shell to run \s-1MH\s0, 798 The user does not leave the shell to run \s-1MH\s0,
790 but he uses \s-1MH\s0 within the shell. 799 but he uses the various \s-1MH\s0 programs within the shell.
791 Using a monolithic program with a captive user interface 800 Using a monolithic program with a captive user interface
792 means ``entering'' the program, using it, and ``exiting'' the program. 801 means ``entering'' the program, using it, and ``exiting'' the program.
793 Using toolchests like \s-1MH\s0 means running programs, 802 Using toolchests like \s-1MH\s0 means running programs,
794 alone or in combinition with others, even from other toolchests, 803 alone or in combinition with others, even from other toolchests,
795 without leaving the shell. 804 without leaving the shell.
796 .PP 805
806 .NH 2
807 Data storage
808 .LP
797 \s-1MH\s0's mail storage is (only little more than) a directory tree 809 \s-1MH\s0's mail storage is (only little more than) a directory tree
798 where mail folders are directories and mail messages are text files. 810 where mail folders are directories and mail messages are text files.
799 Working with \s-1MH\s0's toolchest is much like working 811 Working with \s-1MH\s0's toolchest is much like working
800 with Unix' toolchest: 812 with Unix' toolchest:
801 \f(CWscan\fP is like \f(CWls\fP, 813 \f(CWscan\fP is like \f(CWls\fP,
802 \f(CWshow\fP is like \f(CWcat\fP, 814 \f(CWshow\fP is like \f(CWcat\fP,
803 \f(CWfolder\fP is like \f(CWcd\fP, 815 \f(CWfolder\fP is like \f(CWcd\fP/\f(CWpwd\fP,
804 \f(CWrefile\fP is like \f(CWmv\fP, 816 \f(CWrefile\fP is like \f(CWmv\fP,
805 and \f(CWrmm\fP is like \f(CWrm\fP. 817 and \f(CWrmm\fP is like \f(CWrm\fP.
806 .PP 818 .PP
807 The context of tools in Unix is mainly the current working directory, 819 The context of tools in Unix is mainly the current working directory,
808 the user identification, and the environment variables. 820 the user identification, and the environment variables.
819 \s-1MH\s0's context is meant to be chained to a mail account. 831 \s-1MH\s0's context is meant to be chained to a mail account.
820 But actually, the current message is a property of the mail folder, 832 But actually, the current message is a property of the mail folder,
821 which appears to be a legacy. 833 which appears to be a legacy.
822 This will cause problems when multiple users work 834 This will cause problems when multiple users work
823 in one mail folder simultaneously. 835 in one mail folder simultaneously.
824
825
826 .NH 2
827 Discussion of the design
828 .LP
829 The following paragraphs discuss \s-1MH\s0 in regard to the tenets
830 of the Unix Philosophy which Gancarz identified.
831
832 .PP
833 .I "``Small is beautiful''
834 and
835 .I "``do one thing well''
836 are two design goals that are directly visible in \s-1MH\s0.
837 Gancarz actually presents \s-1MH\s0 as example under the headline
838 ``Making UNIX Do One Thing Well'':
839 .QP
840 [\s-1MH\s0] consists of a series of programs which
841 when combined give the user an enormous ability
842 to manipulate electronic mail messages.
843 A complex application, it shows that not only is it
844 possible to build large applications from smaller
845 components, but also that such designs are actually preferable.
846 .[
847 %A Mike Gancarz
848 %T unix-phil
849 %P 125
850 .]
851 .LP
852 The various small programs of \s-1MH\s0 were relatively easy
853 to write, because each of them is small, limited to one function,
854 and has clear boundaries.
855 For the same reasons, they are also good to maintain.
856 Further more, the system can easily get extended.
857 One only needs to put a new program into the toolchest.
858 This was done, for instance, when \s-1MIME\s0 support was added
859 (e.g. \f(CWmhbuild\fP).
860 Also, different programs can exist to do the basically same job
861 in different ways (e.g. in nmh: \f(CWshow\fP and \f(CWmhshow\fP).
862 If someone needs a mail system with some additionally
863 functions that are available nowhere yet, he best takes a
864 toolchest system like \s-1MH\s0 where he can add the
865 functionality with little work.
866
867 .PP 836 .PP
868 .I "Data storage. 837 .I "Data storage.
869 How \s-1MH\s0 stores data was already mentioned. 838 How \s-1MH\s0 stores data was already mentioned.
870 Mail folders are directories (which contain a file 839 Mail folders are directories (which contain a file
871 \&\f(CW.mh_sequences\fP) under the user's \s-1MH\s0 directory 840 \&\f(CW.mh_sequences\fP) under the user's \s-1MH\s0 directory
892 as mentioned above, remains. 861 as mentioned above, remains.
893 Maildir is generally similar to \s-1MH\s0's format, 862 Maildir is generally similar to \s-1MH\s0's format,
894 but modified towards guaranteed reliability. 863 but modified towards guaranteed reliability.
895 This involves some complexity, unfortunately. 864 This involves some complexity, unfortunately.
896 865
866
867 .NH 2
868 Discussion of the design
869 .LP
870 The following paragraphs discuss \s-1MH\s0 in regard to the tenets
871 of the Unix Philosophy which Gancarz identified.
872
873 .PP
874 .I "``Small is beautiful''
875 and
876 .I "``do one thing well''
877 are two design goals that are directly visible in \s-1MH\s0.
878 Gancarz actually presents \s-1MH\s0 as example under the headline
879 ``Making UNIX Do One Thing Well'':
880 .QP
881 [\s-1MH\s0] consists of a series of programs which
882 when combined give the user an enormous ability
883 to manipulate electronic mail messages.
884 A complex application, it shows that not only is it
885 possible to build large applications from smaller
886 components, but also that such designs are actually preferable.
887 .[
888 %A Mike Gancarz
889 %T unix-phil
890 %P 125
891 .]
892 .LP
893 The various small programs of \s-1MH\s0 were relatively easy
894 to write, because each of them is small, limited to one function,
895 and has clear boundaries.
896 For the same reasons, they are also good to maintain.
897 Further more, the system can easily get extended.
898 One only needs to put a new program into the toolchest.
899 This was done, for instance, when \s-1MIME\s0 support was added
900 (e.g. \f(CWmhbuild\fP).
901 Also, different programs can exist to do the basically same job
902 in different ways (e.g. in nmh: \f(CWshow\fP and \f(CWmhshow\fP).
903 If someone needs a mail system with some additionally
904 functions that are available nowhere yet, he best takes a
905 toolchest system like \s-1MH\s0 where he can add the
906 functionality with little work.
907
908 .PP
909 .I "Store data in flat text files.
910 FIXME
911
897 .PP 912 .PP
898 .I "``Avoid captive user interfaces.'' 913 .I "``Avoid captive user interfaces.''
899 \s-1MH\s0 is perfectly suited for non-interactive use. 914 \s-1MH\s0 is perfectly suited for non-interactive use.
900 It offers all functions directly and without captive user interfaces. 915 It offers all functions directly and without captive user interfaces.
901 If users want a graphical user interface, anyhow, 916 If, nonetheless, users want a graphical user interface,
902 they can have it with \fIxmh\fP or \fIexmh\fP, too. 917 they can have it with \fIxmh\fP or \fIexmh\fP, too.
903 These are graphical frontends for the \s-1MH\s0 toolchest. 918 These are graphical frontends for the \s-1MH\s0 toolchest.
904 This means, all email-related work is still done by \s-1MH\s0 tools, 919 This means, all email-related work is still done by \s-1MH\s0 tools,
905 but the frontend issues the appropriate calls when the user 920 but the frontend issues the appropriate calls when the user
906 clicks on a button. 921 clicks on buttons.
907 Providing easy-to-use user interfaces in form of frontends is a good 922 Providing easy-to-use user interfaces in form of frontends is a good
908 approach, because it does not limit the power of the backend itself. 923 approach, because it does not limit the power of the backend itself.
909 The frontend will anyway only be able to make a subset of the 924 The frontend will anyway only be able to make a subset of the
910 backend's power and flexibility available to the user. 925 backend's power and flexibility available to the user.
911 But if it is a separate program, 926 But if it is a separate program,
912 then the missing parts can still be accessed at the backend directly. 927 then the missing parts can still be accessed at the backend directly.
913 If it is integrated, then this will hardly be possible. 928 If it is integrated, then this will hardly be possible.
929 Further more, it is possible to have different frontends to the same
930 backend.
914 931
915 .PP 932 .PP
916 .I "``Choose portability over efficiency'' 933 .I "``Choose portability over efficiency''
917 and 934 and
918 .I "``use shell scripts to increase leverage and portability'' . 935 .I "``use shell scripts to increase leverage and portability'' .
919 These two tenets are indirectly, but nicely, demonstrated by 936 These two tenets are indirectly, but nicely, demonstrated by
920 Bolsky and Korn in their book about the korn shell. 937 Bolsky and Korn in their book about the Korn Shell.
921 .[ 938 .[
922 %T The KornShell: command and programming language 939 %T The KornShell: command and programming language
923 %A Morris I. Bolsky 940 %A Morris I. Bolsky
924 %A David G. Korn 941 %A David G. Korn
925 %I Prentice Hall 942 %I Prentice Hall
926 %D 1989 943 %D 1989
944 %P 254\(en290
927 %O \s-1ISBN\s0: 0-13-516972-0 945 %O \s-1ISBN\s0: 0-13-516972-0
928 .] 946 .]
929 They demonstrated, in one chapter of the book, a basic implementation 947 They demonstrated, in chapter 18 of the book, a basic implementation
930 of a subset of \s-1MH\s0 in ksh scripts. 948 of a subset of \s-1MH\s0 in ksh scripts.
931 Of course, this was just a demonstration, but a brilliant one. 949 Of course, this was just a demonstration, but a brilliant one.
932 It shows how quickly one can implement such a prototype with shell scripts, 950 It shows how quickly one can implement such a prototype with shell scripts,
933 and how readable they are. 951 and how readable they are.
934 The implementation in the scripting language may not be very fast, 952 The implementation in the scripting language may not be very fast,
936 By having the code in an interpreted language, like the shell, 954 By having the code in an interpreted language, like the shell,
937 portability becomes a minor issue, if we assume the interpreter 955 portability becomes a minor issue, if we assume the interpreter
938 to be widespread. 956 to be widespread.
939 This demonstration also shows how easy it is to create single programs 957 This demonstration also shows how easy it is to create single programs
940 of a toolchest software. 958 of a toolchest software.
941 Most of them comprise less than a hundred lines of shell code. 959 There are eight tools (two of them have multiple names) and 16 functions
960 with supporting code.
961 Each tool comprises between 12 and 38 lines of ksh,
962 in total about 200 lines.
963 The functions comprise between 3 and 78 lines of ksh,
964 in total about 450 lines.
942 Such small software is easy to write, easy to understand, 965 Such small software is easy to write, easy to understand,
943 and thus easy to maintain. 966 and thus easy to maintain.
944 A toolchest improves the possibility to only write some parts 967 A toolchest improves the possibility to only write some parts
945 and though create a working result. 968 and though create a working result.
946 Expanding the toolchest without global changes will likely be 969 Expanding the toolchest without global changes will likely be
950 .I "``Use software leverage to your advantage'' 973 .I "``Use software leverage to your advantage''
951 and the lesser tenet 974 and the lesser tenet
952 .I "``allow the user to tailor the environment'' 975 .I "``allow the user to tailor the environment''
953 are ideally followed in the design of \s-1MH\s0. 976 are ideally followed in the design of \s-1MH\s0.
954 Tailoring the environment is heavily encouraged by the ability to 977 Tailoring the environment is heavily encouraged by the ability to
955 directly define default options to programs, even different ones 978 directly define default options to programs.
979 It is even possible to define different default options
956 depending on the name under which the program was called. 980 depending on the name under which the program was called.
957 Software leverage is heavily encouraged by the ease it is to 981 Software leverage is heavily encouraged by the ease it is to
958 create shell scripts that run a specific command line, 982 create shell scripts that run a specific command line,
959 build of several \s-1MH\s0 programs. 983 built of several \s-1MH\s0 programs.
960 There is few software that so much wants users to tailor their 984 There is few software that so much wants users to tailor their
961 environment and to leverage the use of the software, like \s-1MH\s0. 985 environment and to leverage the use of the software, like \s-1MH\s0.
962 Just to make one example: 986 Just to make one example:
963 One might prefer a different listing format for the \f(CWscan\fP 987 One might prefer a different listing format for the \f(CWscan\fP
964 program. 988 program.
965 It is possible to take one of the other distributed format files 989 It is possible to take one of the distributed format files
966 or to write one yourself. 990 or to write one yourself.
967 To use the format as default for \f(CWscan\fP, a single line, 991 To use the format as default for \f(CWscan\fP, a single line,
968 reading 992 reading
969 .DS 993 .DS
970 .CW 994 .CW
973 must be added to \f(CW.mh_profile\fP. 997 must be added to \f(CW.mh_profile\fP.
974 If one wants this different format as an additional command, 998 If one wants this different format as an additional command,
975 instead of changing the default, he needs to create a link to 999 instead of changing the default, he needs to create a link to
976 \f(CWscan\fP, for instance titled \f(CWscan2\fP. 1000 \f(CWscan\fP, for instance titled \f(CWscan2\fP.
977 The line in \f(CW.mh_profile\fP would then start with \f(CWscan2\fP, 1001 The line in \f(CW.mh_profile\fP would then start with \f(CWscan2\fP,
978 as the option should only be in effect when scan was called as 1002 as the option should only be in effect when scan is called as
979 \f(CWscan2\fP. 1003 \f(CWscan2\fP.
980 1004
981 .PP 1005 .PP
982 .I "``Make every program a filter'' 1006 .I "``Make every program a filter''
983 is hard to find in \s-1MH\s0. 1007 is hard to find in \s-1MH\s0.
984 The reason therefore is that most of \s-1MH\s0's tools provide 1008 The reason therefore is that most of \s-1MH\s0's tools provide
985 basic file system operations for the mailboxes. 1009 basic file system operations for the mailboxes.
1010 The reason is the same because of which
986 \f(CWls\fP, \f(CWcp\fP, \f(CWmv\fP, and \f(CWrm\fP 1011 \f(CWls\fP, \f(CWcp\fP, \f(CWmv\fP, and \f(CWrm\fP
987 aren't filters neither. 1012 aren't filters neither.
988 However, they build a basis on which filters can operate. 1013 However, they build a basis on which filters can operate.
989 \s-1MH\s0 does not provide many filters itself, but it is a basis 1014 \s-1MH\s0 does not provide many filters itself, but it is a basis
990 to write filters for. 1015 to write filters for.
1016 An example would be a mail message text highlighter,
1017 that means a program that makes use of a color terminal to display
1018 header lines, quotations, and signatures in distinct colors.
1019 The author's version of this program, for instance,
1020 is a 25 line awk script.
991 1021
992 .PP 1022 .PP
993 .I "``Build a prototype as soon as possible'' 1023 .I "``Build a prototype as soon as possible''
994 was again well followed by \s-1MH\s0. 1024 was again well followed by \s-1MH\s0.
995 This tenet, of course, focuses on early development, which is 1025 This tenet, of course, focuses on early development, which is
997 But without following this guideline at the very beginning, 1027 But without following this guideline at the very beginning,
998 Bruce Borden may have not convinced the management of \s-1RAND\s0 1028 Bruce Borden may have not convinced the management of \s-1RAND\s0
999 to ever create \s-1MH\s0. 1029 to ever create \s-1MH\s0.
1000 In Bruce' own words: 1030 In Bruce' own words:
1001 .QP 1031 .QP
1002 [...] but [Stockton Gaines and Norm Shapiro] were not able 1032 [...] but they [Stockton Gaines and Norm Shapiro] were not able
1003 to convince anyone that such a system would be fast enough to be usable. 1033 to convince anyone that such a system would be fast enough to be usable.
1004 I proposed a very short project to prove the basic concepts, 1034 I proposed a very short project to prove the basic concepts,
1005 and my management agreed. 1035 and my management agreed.
1006 Looking back, I realize that I had been very lucky with my first design. 1036 Looking back, I realize that I had been very lucky with my first design.
1007 Without nearly enough design work, 1037 Without nearly enough design work,
1017 1047
1018 .NH 2 1048 .NH 2
1019 Problems 1049 Problems
1020 .LP 1050 .LP
1021 \s-1MH\s0, for sure is not without problems. 1051 \s-1MH\s0, for sure is not without problems.
1022 There are two main problems: one technical, the other about human behavior. 1052 There are two main problems: one is technical, the other is about human behavior.
1023 .PP 1053 .PP
1024 \s-1MH\s0 is old and email today is very different to email in the time 1054 \s-1MH\s0 is old and email today is very different to email in the time
1025 when \s-1MH\s0 was designed. 1055 when \s-1MH\s0 was designed.
1026 \s-1MH\s0 adopted to the changes pretty well, but it is limited. 1056 \s-1MH\s0 adopted to the changes pretty well, but it is limited.
1027 For example in development resources. 1057 For example in development resources.
1030 More active developers could quickly improve there. 1060 More active developers could quickly improve there.
1031 It is also limited by design, which is the larger problem. 1061 It is also limited by design, which is the larger problem.
1032 \s-1IMAP\s0, for example, conflicts with \s-1MH\s0's design to a large extend. 1062 \s-1IMAP\s0, for example, conflicts with \s-1MH\s0's design to a large extend.
1033 These design conflicts are not easily solvable. 1063 These design conflicts are not easily solvable.
1034 Possibly, they require a redesign. 1064 Possibly, they require a redesign.
1065 Maybe \s-1IMAP\s0 is too different to the classic mail model which \s-1MH\s0 covers,
1066 hence \s-1MH\s0 may never work well with \s-1IMAP\s0.
1035 .PP 1067 .PP
1036 The other kind of problem is human habits. 1068 The other kind of problem is human habits.
1037 When in this world almost all \s-1MUA\s0s are monolithic, 1069 When in this world almost all \s-1MUA\s0s are monolithic,
1038 it is very difficult to convince people to use a toolbox style \s-1MUA\s0 1070 it is very difficult to convince people to use a toolbox style \s-1MUA\s0
1039 like \s-1MH\s0. 1071 like \s-1MH\s0.
1040 The habits are so strong, that even people who understood the concept 1072 The habits are so strong, that even people who understood the concept
1041 and advantages of \s-1MH\s0 do not like to switch. 1073 and advantages of \s-1MH\s0 do not like to switch,
1042 Unfortunately, the frontends to \s-1MH\s0, which can provide familiar look'n'feel, 1074 simply because \s-1MH\s0 is different.
1043 are not very appealing in contrast to what monolithic \s-1MUA\s0s offer. 1075 Unfortunately, the frontends to \s-1MH\s0, which could provide familiar look'n'feel,
1076 are quite outdated and thus not very appealing compared to the modern interfaces
1077 which monolithic \s-1MUA\s0s offer.
1044 1078
1045 .NH 2 1079 .NH 2
1046 Summary \s-1MH\s0 1080 Summary \s-1MH\s0
1047 .LP 1081 .LP
1048 flexibility, no redundancy, use the shell 1082 flexibility, no redundancy, use the shell