|
|
1.1 ! root 1: GNU Emacs Installation Guide ! 2: Copyright (c) 1985 Richard M. Stallman ! 3: ! 4: Permission is granted to anyone to make or distribute verbatim copies ! 5: of this document as received, in any medium, provided that the ! 6: copyright notice and permission notice are preserved, ! 7: and that the distributor grants the recipient permission ! 8: for further redistribution as permitted by this notice. ! 9: ! 10: Permission is granted to distribute modified versions ! 11: of this document, or of portions of it, ! 12: under the above conditions, provided also that they ! 13: carry prominent notices stating who last changed them, ! 14: and that any new or changed statements about me (Richard Stallman) ! 15: or my activities are approved by me. ! 16: ! 17: ! 18: PREPARATION ! 19: ! 20: 0) Make sure your system has enough swapping space allocated ! 21: to handle a program whose pure code is 400k bytes or ! 22: and whose data area is at least 150k and can reach 600k ! 23: bytes or much more. If the swapping space is insufficient, you ! 24: will get an error in the command temacs -l loadup inc dump, ! 25: found in $BUILD/src/ymakefile, or possibly when running the ! 26: final dumped Emacs. ! 27: ! 28: 1) Choose a place in the file structure for the main directory ! 29: of Emacs code to reside. This will ultimately have ! 30: subdirectories named info, lisp, etc, etc. Call this name ! 31: $EMACS. Let $BUILD stand for the name the directory has now. ! 32: ! 33: 2) Copy $BUILD/src/config.h.dist to config.h, and edit it to ! 34: set the right options for your system. The file ! 35: $BUILD/etc/MACHINES may help you decide what to put there. ! 36: ! 37: 3) Copy $BUILD/src/paths.h.dist to paths.h, and edit it to ! 38: contain the correct directory names: $EMACS/lisp for the ! 39: directory for Lisp libraries, and $EMACS/etc for the ! 40: directory for executables and text files. ! 41: ! 42: Emacs will use these names once it has been built. ! 43: During building, Emacs searches the directory ../lisp for ! 44: Lisp files before the directories specified in paths.h, and ! 45: executable files are found in ../etc. So the main Emacs ! 46: directory $BUILD can be anywhere while Emacs is built, but ! 47: must be renamed to $EMACS afterwards in order for Emacs to ! 48: work properly. ! 49: ! 50: 4) Look at $BUILD/lisp/paths.el; if some of those values ! 51: are not right for your system, create a file ! 52: $BUILD/lisp/site-init.el containing Lisp code to override them. ! 53: You would use the Lisp function `setq'. For example, ! 54: ! 55: (setq news-inews-program "/usr/bin/inews") ! 56: ! 57: is how you would override the default value of the ! 58: variable news-inews-program (which is "/usr/local/inews"). ! 59: ! 60: 5) Put into $BUILD/lisp/site-init.el any Lisp code ! 61: you want loaded into Emacs before it is dumped out. ! 62: ! 63: This file is nonexistent in the distribution. ! 64: You do not need to create it, if you have nothing ! 65: to put in it. ! 66: ! 67: 6) Decide what compiler switches to use. ! 68: You might want to replace the `-g' in the file $BUILD/src/ymakefile ! 69: with `-O'. If you are not running on 4.2 on a vax, ! 70: it is possible that no debugger you have will be able ! 71: to run Emacs with its symbol table, so you might as well ! 72: use `-O' instead. If you do have a debugger that works, ! 73: it is probably best to use `-g' so that you are not ! 74: helpless in the face of a problem. ! 75: ! 76: 7) Refer to the file $BUILD/etc/TERMS for information on ! 77: fields you may wish to add to various termcap entries. ! 78: ! 79: BUILDING GNU EMACS ! 80: The steps below are done by the shell script `build-install'. ! 81: ! 82: 1) Cd to $BUILD/etc and run `make'. ! 83: This creates files named `ctags' and `etags' and `loadst' ! 84: and `make-docfile' and `digest-doc' and `test-distrib'. ! 85: ! 86: 2) Cd to $BUILD/src and Run `make' ! 87: This refers to files in the $BUILD/lisp and $BUILD/etc subdirectories ! 88: using names ../lisp and ../etc. ! 89: ! 90: This creates a file $BUILD/src/xemacs which is the runnable Emacs, ! 91: assigning it a new version number by incrementing the version ! 92: stored in $BUILD/lisp/version.el. ! 93: ! 94: It also creates a file in $BUILD/etc, whose name is ! 95: DOC followed by the current Emacs version. ! 96: This file contains documentation strings for all the ! 97: functions in Emacs. Each time you run make to make a new xemacs, ! 98: a new DOC file with a new name is made. You must keep ! 99: the DOC file for an Emacs version as long as you keep using ! 100: that Emacs version. ! 101: ! 102: ! 103: INSTALLATION ! 104: The steps below are done by the shell script `build-install'. ! 105: ! 106: 0) mv $BUILD $EMACS if $BUILD and $EMACS are not the same. ! 107: This moves the main Emacs directory to the name you have told ! 108: Emacs (via paths.h) it is going to have. ! 109: ! 110: 1) Move the file $EMACS/xemacs to /usr/local/bin/emacs, ! 111: or some other name in users' search paths. ! 112: `xemacs' has an alternate name $EMACS/src/emacs-EMACSVERSION; ! 113: you may wish to make a symbolic link ! 114: named /usr/local/bin/emacs pointing to that alternate name, ! 115: as an easy way of installing different versions. ! 116: ! 117: You can delete $EMACS/src/temacs. ! 118: ! 119: 3) Move the programs ctags and etags from $EMACS/etc ! 120: to /usr/local/bin. These programs are run by users as shell commands. ! 121: ! 122: The program $EMACS/etc/loadst is invoked by Emacs when appropriate. ! 123: ! 124: The programs $EMACS/etc/make-docfile and $EMACS/etc/test-distrib ! 125: are not used any more; they were used in building Emacs. ! 126: ! 127: $EMACS/etc/digest-doc can be used to convert DOC into a ! 128: file for users to read. There is no important reason to move it. ! 129: ! 130: 4) The files in $EMACS/src subdirectory, except for xemacs, ! 131: are not used by Emacs once it is built. ! 132: ! 133: ! 134: LOSSAGES ! 135: Known possible problems building and running GNU Emacs ! 136: ! 137: * In the 4.3bsd distribution, you will get some spurious warning messages ! 138: saying `BSD redefined' or `BSD4_3 redefined' from the C compiler while ! 139: building Emacs. These are due to a last minute surprise in the 4.3 ! 140: header files which we did not have time to correct for. For now, ! 141: please disregard the messages. ! 142: ! 143: * Watch out for .emacs files and EMACSLOADPATH environment vars ! 144: ! 145: These control the actions of Emacs. ! 146: ~/.emacs is your Emacs init file. ! 147: EMACSLOADPATH overrides which directories the function ! 148: "load" will search. ! 149: ! 150: If you observe strange problems, check for these and get rid ! 151: of them, then try again. ! 152: ! 153: * Fatal signal in the command temacs -l loadup inc dump ! 154: ! 155: This has been known to happen due to insufficient swapping ! 156: space available on the machine. ! 157: ! 158: On 68000's, it has also happened because of bugs in the ! 159: subroutine `alloca'. Verify that `alloca' works right, even ! 160: for large blocks (many pages). ! 161: ! 162: * test-distrib says that the distribution has been clobbered ! 163: * or, temacs prints "Command key out of range 0-127" ! 164: * or, temacs runs and dumps xemacs, but xemacs totally fails to work. ! 165: * or, temacs gets errors dumping xemacs ! 166: ! 167: This can be because the .elc files have been garbled. Do not be ! 168: fooled by the fact that most of a .elc file is text: these are ! 169: binary files and can contain all 256 byte values. ! 170: ! 171: In particular `shar' cannot be used for transmitting GNU Emacs. ! 172: It typically truncates "lines". What appear to be "lines" in ! 173: a binary file can of course be of any length. Even once `shar' ! 174: itself is made to work correctly, `sh' discards null characters ! 175: when unpacking the shell archive. ! 176: ! 177: I have also seen character \177 changed into \377. I do not know ! 178: what transfer means caused this problem. Various network ! 179: file transfer programs are suspected of clobbering the high bit. ! 180: ! 181: The only verified ways to transfer GNU Emacs are `tar' ! 182: and rcp or internet ftp between two Unix systems, or chaosnet ! 183: cftp using raw mode. ! 184: ! 185: If you have a copy of Emacs that has been damaged in its ! 186: nonprinting characters, you can fix them: ! 187: ! 188: 1) Record the names of all the .elc files. ! 189: 2) Delete all the .elc files. ! 190: 3) Recompile alloc.c with a value of PURESIZE twice as large. ! 191: You might as well save the old alloc.o. ! 192: 4) Remake xemacs. It should work now. ! 193: 5) Running xemacs, do Meta-x byte-compile-file repeatedly ! 194: to recreate all the .elc files that used to exist. ! 195: 6) Reinstall the old alloc.o (undoing changes to alloc.c if any) ! 196: and remake temacs. ! 197: 7) Remake xemacs. It should work now, with valid .elc files. ! 198: ! 199: * temacs prints "Pure Lisp storage exhausted" ! 200: ! 201: This means that the Lisp code loaded from the .elc and .el ! 202: files during temacs -l loadup inc dump took up more ! 203: space than was allocated. ! 204: ! 205: This could be caused by ! 206: 1) adding code to the preloaded Lisp files ! 207: 2) adding more preloaded files in loadup.el ! 208: 3) having a site-init.el which loads files. ! 209: Note that ANY site-init.el is nonstandard; ! 210: if you have received Emacs from some other site ! 211: and it contains a site-init.el file, consider ! 212: deleting that file. ! 213: 4) getting the wrong .el or .elc files ! 214: (not from the directory you expected). ! 215: 5) deleting some .elc files that are supposed to exist. ! 216: This would cause the source files (.el files) to be ! 217: loaded instead. They take up more room, so you lose. ! 218: ! 219: * Changes made to .el files do not take effect. ! 220: ! 221: You may have forgotten to recompile them into .elc files. ! 222: Then the old .elc files will be loaded, and your changes ! 223: will not be seen. To fix this, do M-x byte-recompile-directory ! 224: and specify the directory that contains the Lisp files. ! 225: ! 226: * The dumped Emacs (xemacs) crashes when run, trying to write pure data. ! 227: ! 228: Two causes have been seen for such problems. ! 229: ! 230: 1) On a system where getpagesize is not a system call, it is defined ! 231: as a macro. If the definition (in both unexec.c and malloc.c) is wrong, ! 232: it can cause problems like this. You might be able to find the correct ! 233: value in the man page for a.out (5). ! 234: ! 235: 2) Some systems allocate variables declared static among the ! 236: initialized variables. Emacs makes all initialized variables in most ! 237: of its files pure after dumping, but the variables declared static and ! 238: not initialized are not supposed to be pure. On these systems you ! 239: may need to add "#define static" to the m- or the s- file. ! 240: ! 241: * rmail gets error getting new mail ! 242: ! 243: rmail gets new mail from /usr/spool/mail/$USER using a program ! 244: called movemail. This program interlocks with /bin/mail using ! 245: the protocol defined by /bin/mail, which involves creating a ! 246: lock file. It must be able to write in /usr/spool/mail ! 247: in order to do this. ! 248: ! 249: You may have to change config.h to #define MAIL_USE_FLOCK ! 250: if your system is configured to use flock to interlock ! 251: access to mail files. ! 252: ! 253: * Emacs spontaneously displays "I-search: " at the bottom of the screen. ! 254: ! 255: This means that Control-S/Control-Q "flow control" is being used. ! 256: C-s/C-q flow control is bad for Emacs editors because it takes away ! 257: C-s and C-q as user commands. Since editors do not output long streams ! 258: of text without user commands, there is no need for a user-issuable ! 259: "stop output" command in an editor; therefore, a properly designed ! 260: flow control mechanism would transmit all possible input characters ! 261: without interference. Designing such a mechanism is easy, for a person ! 262: with at least half a brain. ! 263: ! 264: There are three possible reasons why flow control could be taking place: ! 265: ! 266: 1) Terminal has not been told to disable flow control ! 267: 2) Insufficient padding for the terminal in use ! 268: 3) Some sort of terminal concentrator or line switch is responsible ! 269: ! 270: First of all, many terminals have a set-up mode which controls ! 271: whether they generate flow control characters. This must be ! 272: set to "no flow control" in order for Emacs to work. Sometimes ! 273: there is an escape sequence that the computer can send to turn ! 274: flow control off and on. If so, perhaps the termcap `ti' string ! 275: should turn flow control off, and the `te' string should turn it on. ! 276: ! 277: Once the terminal has been told "no flow control", you may find it ! 278: needs more padding. The amount of padding Emacs sends is controlled ! 279: by the termcap entry for the terminal in use, and by the output baud ! 280: rate as known by the kernel. The shell command `stty' will print ! 281: your output baud rate; `stty' with suitable arguments will set it if ! 282: it is wrong. Setting to a higher speed causes increased padding. If ! 283: the results are wrong for the correct speed, there is probably a ! 284: problem in the termcap entry. You must speak to a local Unix wizard ! 285: to fix this. Perhaps you are just using the wrong terminal type. ! 286: ! 287: For terminals that lack a "no flow control" mode, sometimes just ! 288: giving lots of padding will prevent actual generation of flow control ! 289: codes. You might as well try it. ! 290: ! 291: If you are really unlucky, your terminal is connected to the computer ! 292: through a concentrator which sends flow control to the computer, or it ! 293: insists on sending flow control itself no matter how much padding you ! 294: give it. You are screwed! You should replace the terminal or ! 295: concentrator with a properly designed one. In the mean time, ! 296: some drastic measures can make Emacs semi-work. ! 297: ! 298: One drastic measure to ignore C-s and C-q, while sending enough ! 299: padding that the terminal will not really lose any output. ! 300: Ignoring C-s and C-q can be done by using keyboard-translate-table ! 301: to map them into an undefined character such as C-^ or C-\. Sending ! 302: lots of padding is done by changing the termcap entry. ! 303: ! 304: An even more drastic measure is to make Emacs understand flow control. ! 305: Do (set-input-mode nil t). Emacs will then interpret C-s and C-q as ! 306: flow control commands. You will lose the ability to use them for ! 307: Emacs commands. Also, as a consequence of using CBREAK mode, the ! 308: terminal's Meta-key, if any, will not work, and C-g will be liable to ! 309: cause a loss of output which will produce garbage on the screen. You ! 310: can use keyboard-translate-table to map two other input characters ! 311: (such as C-^ and C-\) into C-s and C-q, so that you can still search ! 312: and quote. ! 313: ! 314: I have no intention of ever redisigning the Emacs command set for ! 315: the assumption that terminals use C-s/C-q flow control. This ! 316: flow control technique is a bad design, and terminals that need ! 317: it are bad merchandise and should not be purchased. If you can ! 318: get some use out of GNU Emacs on inferior terminals, I am glad, ! 319: but I will not make Emacs worse for properly designed systems ! 320: for the sake of inferior systems. ! 321: ! 322: * Control-S and Control-Q commands are ignored completely. ! 323: ! 324: For some reason, your system is using brain-damaged ^S/^Q flow ! 325: control despite Emacs's attempts to turn it off. Perhaps your ! 326: terminal is connected to the computer through a concentrator ! 327: that wants to use flow control. ! 328: ! 329: You should first try to tell the concentrator not to use flow control. ! 330: If you succeed in this, try making the terminal work without ! 331: flow control, as described in the preceding section. ! 332: ! 333: If that line of approach is not successful, map some other characters ! 334: into C-s and C-q using keyboard-translate-table. I suggest C-^ and ! 335: C-\. ! 336: ! 337: * Screen is updated wrong, but only on one kind of terminal. ! 338: ! 339: This could mean that the termcap entry you are using for that ! 340: terminal is wrong, or it could mean that Emacs has a bug handing ! 341: the combination of features specified for that terminal. ! 342: ! 343: The first step in tracking this down is to record what characters ! 344: Emacs is sending to the terminal. Execute the Lisp expression ! 345: (open-termscript "./emacs-script") to make Emacs write all ! 346: terminal output into the file ~/emacs-script as well; then do ! 347: what makes the screen update wrong, and look at the file ! 348: and decode the characters using the manual for the terminal. ! 349: There are several possibilities: ! 350: ! 351: 1) The characters sent are correct, according to the terminal manual. ! 352: ! 353: In this case, there is no obvious bug in Emacs, and most likely you ! 354: need more padding, or possibly the terminal manual is wrong. ! 355: ! 356: 2) The characters sent are incorrect, due to an obscure aspect ! 357: of the terminal behavior not described in an obvious way ! 358: by termcap. ! 359: ! 360: This case is hard. It will be necessary to think of a way for ! 361: Emacs to distinguish between terminals with this kind of behavior ! 362: and other terminals that behave subtly differently but are ! 363: classified the same by termcap; or else find an algorithm for ! 364: Emacs to use that avoids the difference. Such changes must be ! 365: tested on many kinds of terminals. ! 366: ! 367: 3) The termcap entry is wrong. ! 368: ! 369: See the file TERMS in this directory for information on changes ! 370: that are known to be needed in commonly used termcap entries ! 371: for certain terminals. ! 372: ! 373: 4) The characters sent are incorrect, and clearly cannot be ! 374: right for any terminal with the termcap entry you were using. ! 375: ! 376: This is unambiguously an Emacs bug, and can probably be fixed ! 377: in termcap.c, tparam.c, term.c, scroll.c, cm.c or dispnew.c. ! 378: ! 379: * Output from Control-V is slow. ! 380: ! 381: On many bit-map terminals, scrolling operations are fairly slow. ! 382: Often the termcap entry for the type of terminal in use fails ! 383: to inform Emacs of this. The two lines at the bottom of the screen ! 384: before a Control-V command are supposed to appear at the top after ! 385: the Control-V command. If Emacs thinks scrolling the lines is fast, ! 386: it will scroll them to the top of the screen. ! 387: ! 388: If scrolling is slow but Emacs thinks it is fast, the usual reason is ! 389: that the termcap entry for the terminal you are using does not ! 390: specify any padding time for the `al' and `dl' strings. Emacs ! 391: concludes that these operations take only as much time as it takes to ! 392: send the commands at whatever line speed you are using. You must ! 393: fix the termcap entry to specify, for the `al' and `dl', as much ! 394: time as the operations really take. ! 395: ! 396: Currently Emacs thinks in terms of serial lines which send characters ! 397: at a fixed rate, so that any operation which takes time for the ! 398: terminal to execute must also be padded. With bit-map terminals ! 399: operated across networks, often the network provides some sort of ! 400: flow control so that padding is never needed no matter how slow ! 401: an operation is. You must still specify a padding time if you want ! 402: Emacs to realize that the operation takes a long time. This will ! 403: cause padding characters to be sent unnecessarily, but they do ! 404: not really cost much. They will be transmitted while the scrolling ! 405: is happening and then discarded quickly by the terminal. ! 406: ! 407: Most bit-map terminals provide commands for inserting or deleting ! 408: multiple lines at once. Define the `AL' and `DL' strings in the ! 409: termcap entry to say how to do these things, and you will have ! 410: fast output without wasted padding characters. These strings should ! 411: each contain a single %-spec saying how to send the number of lines ! 412: to be scrolled. These %-specs are like those in the termcap ! 413: `cm' string. ! 414: ! 415: You should also define the `IC' and `DC' strings if your terminal ! 416: has a command to insert or delete multiple characters. These ! 417: take the number of positions to insert or delete as an argument. ! 418: ! 419: A `cs' string to set the scrolling region will reduce the amount ! 420: of motion you see on the screen when part of the screen is scrolled. ! 421: ! 422: * You type Control-H (Backspace) expecting to delete characters. ! 423: ! 424: Put `stty dec' in your .login file and your problems will disappear ! 425: after a day or two. ! 426: ! 427: The choice of Backspace for erasure was based on confusion, caused by ! 428: the fact that backspacing causes erasure (later, when you type another ! 429: character) on most display terminals. But it is a mistake. Deletion ! 430: of text is not the same thing as backspacing followed by failure to ! 431: overprint. I do not wish to propagate this confusion by conforming ! 432: to it. ! 433: ! 434: For this reason, I believe `stty dec' is the right mode to use, ! 435: and I have designed Emacs to go with that. If there were a thousand ! 436: other control characters, I would define Control-h to delete as well; ! 437: but there are not very many other control characters, and I think ! 438: that providing the most mnemonic possible Help character is more ! 439: important than adapting to people who don't use `stty dec'. ! 440: ! 441: If you are obstinate about confusing buggy overprinting with deletion, ! 442: you can redefine Backspace in your .emacs file: ! 443: (global-set-key "\b" 'delete-backward-char) ! 444: You may then wish to put the function help-command on some ! 445: other key. I leave to you the task of deciding which key. ! 446: ! 447: * ld complains because `alloca' is not defined on your system. ! 448: ! 449: Alloca is a library function in 4.2bsd, which is used very heavily by ! 450: GNU Emacs. Use of malloc instead is very difficult, as you would have ! 451: to arrange for the storage to be freed, and do so even in the case of ! 452: a longjmp happening inside a subroutine. Many subroutines in Emacs ! 453: can do longjmp. ! 454: ! 455: If your system does not support alloca, try defining the symbol ! 456: C_ALLOCA in the m-...h file for that machine. This will enable the use ! 457: in Emacs of a portable simulation for alloca. But you will find that ! 458: Emacs's performance and memory use improve if you write a true ! 459: alloca in assembler language. ! 460: ! 461: alloca (N) should return the address of an N-byte block of memory ! 462: added dynamically to the current stack frame. ! 463: ! 464: * Vax C compiler bugs affecting Emacs. ! 465: ! 466: You may get one of these problems compiling Emacs: ! 467: ! 468: foo.c line nnn: compiler error: no table entry for op STASG ! 469: foo.c: fatal error in /lib/ccom ! 470: ! 471: These are due to bugs in the C compiler; the code is valid C. ! 472: Unfortunately, the bugs are unpredictable: the same construct ! 473: may compile properly or trigger one of these bugs, depending ! 474: on what else is in the source file being compiled. Even changes ! 475: in header files that should not affect the file being compiled ! 476: can affect whether the bug happens. In addition, sometimes files ! 477: that compile correctly on one machine get this bug on another machine. ! 478: ! 479: As a result, it is hard for me to make sure this bug will not affect ! 480: you. I have attempted to find and alter these constructs, but more ! 481: can always appear. However, I can tell you how to deal with it if it ! 482: should happen. The bug comes from having an indexed reference to an ! 483: array of Lisp_Objects, as an argument in a function call: ! 484: Lisp_Object *args; ! 485: ... ! 486: ... foo (5, args[i], ...)... ! 487: putting the argument into a temporary variable first, as in ! 488: Lisp_Object *args; ! 489: Lisp_Object tem; ! 490: ... ! 491: tem = args[i]; ! 492: ... foo (r, tem, ...)... ! 493: causes the problem to go away. ! 494: The `contents' field of a Lisp vector is an array of Lisp_Objects, ! 495: so you may see the problem happening with indexed references to that. ! 496: ! 497: * 68000 C compiler problems ! 498: ! 499: Various 68000 compilers have different problems. ! 500: These are some that have been observed. ! 501: ! 502: ** Using value of assignment expression on union type loses. ! 503: This means that x = y = z; or foo (x = z); does not work ! 504: if x is of type Lisp_Object. ! 505: ! 506: ** "cannot reclaim" error. ! 507: ! 508: This means that an expression is too complicated. You get the correct ! 509: line number in the error message. The code must be rewritten with ! 510: simpler expressions. ! 511: ! 512: ** XCONS, XSTRING, etc macros produce incorrect code. ! 513: ! 514: If temacs fails to run at all, this may be the cause. ! 515: Compile this test program and look at the assembler code: ! 516: ! 517: struct foo { char x; unsigned int y : 24; }; ! 518: ! 519: lose (arg) ! 520: struct foo arg; ! 521: { ! 522: test ((int *) arg.y); ! 523: } ! 524: ! 525: If the code is incorrect, your compiler has this problem. ! 526: In the XCONS, etc., macros in lisp.h you must replace (a).u.val with ! 527: ((a).u.val + coercedummy) where coercedummy is declared as int. ! 528: ! 529: This problem will not happen if the m-...h file for your type ! 530: of machine defines NO_UNION_TYPE. That is the recommended setting now. ! 531: ! 532: * C compilers lose on returning unions ! 533: ! 534: I hear that some C compilers cannot handle returning ! 535: a union type. Most of the functions in GNU Emacs return ! 536: type Lisp_Object, which is currently defined as a union. ! 537: ! 538: This problem will not happen if the m-...h file for your type ! 539: of machine defines NO_UNION_TYPE. That is the recommended setting now.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.